Subject: bug#22146: Stack overflow in reftex-parse-all

From: Mosè Giordano <[email-masked]>
Date: Sun, 13 Dec 2015 18:59:42 +0100

2015-12-13 18:46 GMT+01:00 Tassilo Horn <[email-masked]>:
> Mosè Giordano <[email-masked]> writes:
>
>>>>>     (re-search-forward "\\[[^]]*\\<label")
>>>>>
>>>>> at the beginning of the buffer suggested by Nils.  So, it doesn't
>>>>> seem there is an incomplete match, but simply "\\[[^]]*" is too
>>>>> greedy.
>>>>
>>>> This expression contains only a single explicit wildcard.  A stack
>>>> overflow for it most certainly is a bug.  Is this really fixed in
>>>> 25.1 or is there just a larger stack?
>>>
>>> I also get a stack overflow with this starting with a buffer size of
>>> about 800 lines.  But I can run
>>>
>>>   (re-search-forward reftex-everything-regexp nil t)
>>>
>>> without problems even after adding 100.000 more "foo foo foo..."
>>> lines to the test file...
>>
>> Uh, in Emacs 24.5
>>
>>     (re-search-forward "\\[[^]]*\\<label" nil t)
>>
>> throws the stack overflow error, indeed I tested also this
>> possibility.  So are you saying that in Emacs 25.1 the noerror option
>> prevents stack overflow?
>
> No, in Emacs 25 the regexp was broken in a way that its meaning was not
> "[ and then many times something different than ]" but "[, then not
> another [, and then zero or many times a ]".  Now that I fixed the
> regexp again, Emacs 25 breaks in the same way.
>
>> Anyway, how about my suggestion to use
>>
>>     "\\[[^]]\{0,1000\}\\<label"
>>
>> ?  1000 characters are 12.5 80-column-wide lines, I think it's large enough.
>
> Isn't the syntax "\\[[^]]\\{0,1000\\}\\<label"?

Uh, yes, sorry.

> I tried going up to a
> maximum of 30000 and it still didn't overflow,

It does for me, from 16667 to be precise.

> so I think that's an
> appropriate fix (say, maybe 2000 instead of 1000 to be extra safe).
> Feel free to change `reftex-label-regexps' accordingly.

I don't have write access to Emacs repo :-)

Bye,
Mosè