Subject: Re: bug#28850: 26.0.90; Error running timer 'jit-lock-stealth-fontify': (error "Invalid search bound (wrong side of point)")

From: Alan Mackenzie <[email-masked]>
Date: Tue, 30 Apr 2019 11:33:02 +0000

Hello again, Basil.

On Tue, Apr 30, 2019 at 02:51:03 +0100, Basil L. Contovounesios wrote:
> Eli Zaretskii <[email-masked]> writes:

> >> Date: Wed, 25 Oct 2017 19:11:37 +0000
> >> Cc: [email-masked]
> >> From: Alan Mackenzie <[email-masked]>

> >> Actually, it wasn't that difficult to amend that form generator.  Would
> >> you please try out the patch below, which should apply cleanly to
> >> master.

> > I think you've solved the problem, because I let Emacs run idle for 10
> > hours, and it didn't hit this error even once.

> It seems to have returned in some way.  I can't reproduce this on Emacs
> 26, but on latest master, the following steps:

> 0. emacs -Q
> 1. (progn (setq debug-on-error t)
>           (setq jit-lock-stealth-nice nil)
>           (setq jit-lock-stealth-time 0)
>           (find-function #'next-property-change))
> 2. C-x C-e

> almost immediately lead to the following backtrace:

> Debugger entered--Lisp error: (error "Invalid search bound (wrong side of point)")
>   search-forward-regexp("\\<\\(\\(?:enum\\)\\)\\>[^][{};/#=]*{" 1673 t)
>   c-font-lock-enum-body(1673)
>   font-lock-fontify-keywords-region(1123 1673 nil)
>   font-lock-default-fontify-region(1123 1673 nil)
>   c-font-lock-fontify-region(1173 1673 nil)
>   font-lock-fontify-region(1173 1673)
>   #f(compiled-function (fun) #<bytecode 0x1565bb8a9581>)(font-lock-fontify-region)
>   run-hook-wrapped(#f(compiled-function (fun) #<bytecode 0x1565bb8a9581>) font-lock-fontify-region)
>   jit-lock--run-functions(1173 1673)
>   jit-lock-fontify-now(1173 1673)
>   jit-lock-stealth-fontify(t)
>   apply(jit-lock-stealth-fontify t)
>   timer-event-handler([t 0 0 974323 nil jit-lock-stealth-fontify (t) idle 261000])

The cause of this is a (search-forward-regexp <regexp> limit t) in a loop, where
the code fails to check (< (point) limit) at the start.  In textprop.c in
master, it so happens that the last successful iteration of the loop
leaves point beyond limit.  So we get the exception.

This is easy to correct, but first I'm going to check for all the other
places where the same mistake occurs.  Expect a patch soon!

[ .... ]

> Thanks,

> -- 
> Basil

-- 
Alan Mackenzie (Nuremberg, Germany).