Bug in Lyx 1.3.4 ?

Stephan Witt st.witt at gmx.net
Thu Feb 6 21:36:30 UTC 2020


Am 06.02.2020 um 19:10 schrieb Enrico Forestieri <forenr at lyx.org>:
> 
> On Thu, Feb 06, 2020 at 06:37:43PM +0100, Stephan Witt wrote:
>> Am 06.02.2020 um 15:58 schrieb Enrico Forestieri <forenr at lyx.org>:
>>> 
>>> On Thu, Feb 06, 2020 at 01:52:15PM +0100, Pavel Sanda wrote:
>>>> On Thu, Feb 06, 2020 at 08:15:45AM +0100, Stephan Witt wrote:
>>>>> Am 06.02.2020 um 01:02 schrieb Richard Kimberly Heck <rikiheck at lyx.org>:
>>>>>> 
>>>>>> I assume this is an old bug? Or is it a new one?
>>>>> 
>>>>> I can reproduce something similar with 2.4.0 too. But I cannot reproduce with 2.2.4.
>>>> 
>>>> I can confirm it with Qt5 now.
>>>> Bisect leads to:
>>>> 
>>>> commit a2d181905a95b3bb983dac60f3d9603413a01f34
>>>> Author: Enrico Forestieri <forenr at lyx.org>
>>>> Date:   Tue Jun 25 22:23:51 2019 +0200
>>>> 
>>>>   Fix bug #11586
>>>> 
>>>>   Do not replace a latex command with the corresponding symbol
>>>>   in the unicodesymbols file unless it can be encoded in the
>>>>   document encoding.
>>> 
>>> That commit simply exposes the bug, which is the fact that the buffer
>>> member is not initialized. I think the patch by Stephan is correct.
>> 
>> That leads me to the question if there are more occurrences of this problem.
>> 
>> E.g. with 2.3.x in InsetMathMacro::attachArguments() the line
>> 
>> d->expanded_ = MathData(); 
>> 
>> could be better
>> 
>> d->expanded_ = MathData(d->definition_.buffer());
>> 
>> But in fact I don’t know if it is that simple pattern.
> 
> Uninitialized buffer members have been a plague in mathed in the past.
> You will see a lot of code like "buf && buf->something" to account for that.
> Sometimes not having a properly initialized buffer member can be
> irrelevant and sometimes not.
> 
> Nowadays I think it was spent some effort for properly initializing
> (and also updating when copy/pasting) the buffer pointer, so it makes
> sense to discover those (now presumably) corner cases and act on them,
> rather than adding the check for a null member. 
> 
> However, I would act only when we are sure it is an issue, rather than
> indiscriminately trying to initialize everything. In the particular
> case you report it may be that this initialization is performed later
> (note that I did not check, so I cannot be sure).
> 
> I would follow the old "if it ain't broke, don't fix it" approach.

I see, thanks for the answer.

But some cases I’d like to point out:

InsetMathSpace::doDispatch() calls createInsetMath_fromDialogStr()
createInsetMath_fromDialogStr calls mathed_parse_cell()
mathed_parse_cell() calls Parser() with NULL buffer

Similar is the call to createInsetMath_fromDialogStr in
InsetMathRef::doDispatch() and InsetMathRef::changeTarget().

These look dangerous too, IMO. What do you think?
Do you know how to trigger this pieces of code?

Stephan


More information about the lyx-devel mailing list