bug#44724: Uninitialised variables in syntax.c cause trouble.

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

bug#44724: Uninitialised variables in syntax.c cause trouble.

Alan Mackenzie
Hello, Emacs.

On the master branch.

In src/syntax.c, there are several uninitialised static variables, one of
which is find_start_value.

It is used in function find_defun_start before being initialised.  The
first use is at L.14 of the function, this:

      && pos >= find_start_value

.  This has the effect of causing a certain (forward-comment -1) (which
calls back_comment, which calls find_defun_start) to fail.

In my test setup (I am writing tests for syntax.c), find_start_value's
value at loading time was randomly 1270, which was spuriously inside the
comment I was trying to scan backwards over.  back_comment thus failed to
recognise the comment, and returned failed.

All these variables need initialising to something if the code in
syntax.c is to work properly.

--
Alan Mackenzie (Nuremberg, Germany).



Reply | Threaded
Open this post in threaded view
|

bug#44724: Uninitialised variables in syntax.c cause trouble.

martin rudalics
 > In src/syntax.c, there are several uninitialised static variables, one of
 > which is find_start_value.
 >
 > It is used in function find_defun_start before being initialised.  The
 > first use is at L.14 of the function, this:
 >
 >        && pos >= find_start_value
 >
 > .  This has the effect of causing a certain (forward-comment -1) (which
 > calls back_comment, which calls find_defun_start) to fail.
 >
 > In my test setup (I am writing tests for syntax.c), find_start_value's
 > value at loading time was randomly 1270, which was spuriously inside the
 > comment I was trying to scan backwards over.  back_comment thus failed to
 > recognise the comment, and returned failed.

Just curious: Did current_buffer == find_start_buffer really succeed
in your scenario?

martin



Reply | Threaded
Open this post in threaded view
|

bug#44724: Uninitialised variables in syntax.c cause trouble.

martin rudalics
 >> Just curious: Did current_buffer == find_start_buffer really succeed
 >> in your scenario?
 >
 > Yes it did.  All four comparisons in that block of code succeeded,
 > causing a spurious value to be returned by find_defun_start.

Isn't the probability for such a thing to be caused by uninitialized
variables lower than that of the Emacs tagging scheme to fail as a
whole?

 > But now I think that that value was a previously valid one which just
 > hadn't been updated on buffer changes.
 >
 > I don't think there's any cache invalidation code associated with this
 > cache,

MODIFF == find_start_modiff

 > and I think that's why it gave an invalid result.

martin



Reply | Threaded
Open this post in threaded view
|

bug#44724: Uninitialised variables in syntax.c cause trouble.

Alan Mackenzie
Hello, Martin.

On Thu, Nov 19, 2020 at 09:25:50 +0100, martin rudalics wrote:
>  >> Just curious: Did current_buffer == find_start_buffer really succeed
>  >> in your scenario?

>  > Yes it did.  All four comparisons in that block of code succeeded,
>  > causing a spurious value to be returned by find_defun_start.

> Isn't the probability for such a thing to be caused by uninitialized
> variables lower than that of the Emacs tagging scheme to fail as a
> whole?

Yes.

>  > But now I think that that value was a previously valid one which just
>  > hadn't been updated on buffer changes.

>  > I don't think there's any cache invalidation code associated with this
>  > cache,

> MODIFF == find_start_modiff

Yes, thanks, I was wrong there.

>  > and I think that's why it gave an invalid result.

I've found out what my problem is.  find_defun_start, unless one takes
precautions against it, calls syntax-ppss, which in my situation was
uninitialised.  There is nothing in Emacs to cause the initialisation of
syntax-ppss when, say, the syntax-table is changed.  It all needs to be
done by hand.

I'll close this bug as not a bug.

Thanks for all the help!

> martin

--
Alan Mackenzie (Nuremberg, Germany).



Reply | Threaded
Open this post in threaded view
|

bug#44724: Uninitialised variables in syntax.c cause trouble.

Lars Ingebrigtsen
Alan Mackenzie <[hidden email]> writes:

> I'll close this bug as not a bug.

This wasn't done, so I'm doing that now.

--
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no