unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#71681: 29.3.50; tree-sitter crash
@ 2024-06-20 16:33 Juri Linkov
  2024-06-22 23:55 ` Yuan Fu
  0 siblings, 1 reply; 15+ messages in thread
From: Juri Linkov @ 2024-06-20 16:33 UTC (permalink / raw)
  To: 71681; +Cc: Yuan Fu

Evaluating this expression causes a crash:

(progn
  (find-file (expand-file-name "src/treesit.c" installation-directory))
  (c-ts-mode)
  (font-lock-ensure 63209 63387))

in latest master, but not in latest emacs-29 (only in 5-months old emacs-29).

If this is not reproducible, I could provide more details.

libtree-sitter is at the latest version.

Thread 1 "emacs" received signal SIGSEGV, Segmentation fault.
0x00007ffff3f88f41 in ts_language_public_symbol () from /usr/local/lib/libtree-sitter.so.0
(gdb) bt
#0  0x00007ffff3f88f41 in ts_language_public_symbol () at /usr/local/lib/libtree-sitter.so.0
#1  0x00007ffff3f9fe9c in ts_query_cursor.advance () at /usr/local/lib/libtree-sitter.so.0
#2  0x00007ffff3fa117f in ts_query_cursor_next_match () at /usr/local/lib/libtree-sitter.so.0
#3  0x00005555557f0f8f in Ftreesit_query_capture (node=<optimized out>, query=<optimized out>, beg=<optimized out>, end=<optimized out>, node_only=XIL(0)) at treesit.c:3014
#4  0x00007fffec125106 in F747265657369742d2d666f6e742d6c6f636b2d666f6e746966792d726567696f6e2d31_treesit__font_lock_fontify_region_1_0 ()
#5  0x000055555575faf7 in Ffuncall (nargs=7, args=0x7fffffffcc00) at eval.c:3093
#6  0x00007fffec124e28 in F747265657369742d666f6e742d6c6f636b2d666f6e746966792d726567696f6e_treesit_font_lock_fontify_region_0 ()
#7  0x000055555575faf7 in Ffuncall (nargs=4, args=0x7fffffffccb0) at eval.c:3093
#8  0x00007fffef266534 in F666f6e742d6c6f636b2d666f6e746966792d73796e746163746963616c6c792d726567696f6e_font_lock_fontify_syntactically_region_0 ()
#9  0x000055555575faf7 in Ffuncall (nargs=4, args=0x7fffffffce10) at eval.c:3093
#10 0x00007fffef26427f in F666f6e742d6c6f636b2d64656661756c742d666f6e746966792d726567696f6e_font_lock_default_fontify_region_0 ()
#11 0x000055555575faf7 in Ffuncall (nargs=4, args=0x7fffffffceb0) at eval.c:3093
#12 0x00007fffef2630c5 in F666f6e742d6c6f636b2d666f6e746966792d726567696f6e_font_lock_fontify_region_0 ()
#13 0x00005555557a8b38 in exec_byte_code (fun=<optimized out>, args_template=<optimized out>, nargs=<optimized out>, args=<optimized out>) at lisp.h:2243
#14 0x000055555575faf7 in Ffuncall (nargs=2, args=0x7fffffffd030) at eval.c:3093
#15 0x00005555557602a0 in run_hook_wrapped_funcall (nargs=<optimized out>, args=0x7fffffffd030) at eval.c:2872
#16 0x000055555575e9fb in run_hook_with_args (nargs=2, args=0x7fffffffd030, funcall=0x555555760280 <run_hook_wrapped_funcall>) at eval.c:2953
#17 0x00007fffef236115 in F6a69742d6c6f636b2d2d72756e2d66756e6374696f6e73_jit_lock__run_functions_0 ()
#18 0x000055555575faf7 in Ffuncall (nargs=3, args=0x7fffffffd150) at eval.c:3093
#19 0x00007fffef2369e9 in F6a69742d6c6f636b2d666f6e746966792d6e6f77_jit_lock_fontify_now_0 ()
#20 0x000055555575faf7 in Ffuncall (nargs=3, args=0x7fffffffd250) at eval.c:3093
#21 0x00007fffef263482 in F666f6e742d6c6f636b2d656e73757265_font_lock_ensure_0 ()
#22 0x00005555557631da in eval_sub (form=<optimized out>) at lisp.h:2243
#23 0x0000555555763381 in Fprogn (body=<optimized out>) at eval.c:439
#24 0x0000555555763066 in eval_sub (form=<optimized out>) at lisp.h:2243
#25 0x0000555555763381 in Fprogn (body=<optimized out>) at eval.c:439
#26 0x0000555555763066 in eval_sub (form=<optimized out>) at lisp.h:2243
#27 0x0000555555764bc1 in Fprogn (body=<optimized out>) at eval.c:439
#28 Flet (args=<optimized out>) at eval.c:1109
#29 0x0000555555763066 in eval_sub (form=<optimized out>) at lisp.h:2243
#30 0x0000555555763437 in Fsetq (args=<optimized out>) at eval.c:486
#31 0x0000555555763066 in eval_sub (form=<optimized out>) at lisp.h:2243
#32 0x000055555578ce3a in readevalloop_eager_expand_eval (val=<optimized out>, macroexpand=XIL(0xadd0)) at lisp.h:1192
#33 0x0000555555794ba0 in readevalloop (readcharfun=XIL(0x7ffff02e33d5), infile0=0x0, sourcename=XIL(0), printflag=true, unibyte=<optimized out>, readfun=XIL(0x5555560bc1f5), start=make_fixnum(202), end=XIL(0x5555560bc285)) at lread.c:2538
#34 0x000055555579601a in Feval_region (start=make_fixnum(202), end=make_fixnum(328), printflag=XIL(0x30), read_function=XIL(0x5555560bc1f5)) at lisp.h:752
#35 0x00007fffefacbbf6 in F656c6973702d2d6576616c2d646566756e_elisp__eval_defun_0 ()
#36 0x000055555575faf7 in Ffuncall (nargs=1, args=0x7fffffffd9f8) at eval.c:3093
#37 0x00007fffefacbcb1 in F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_38 ()
#38 0x000055555575faf7 in Ffuncall (nargs=1, args=0x7fffffffda40) at eval.c:3093
#39 0x0000555555760f09 in call0 (fn=<optimized out>) at lisp.h:3515
#40 Fhandler_bind_1 (nargs=<optimized out>, args=0x7fffffffda90) at eval.c:1478
#41 0x00007fffefacbd7a in F6576616c2d646566756e_eval_defun_0 ()
#42 0x000055555575faf7 in Ffuncall (nargs=nargs@entry=2, args=args@entry=0x7fffffffdb58) at eval.c:3093
#43 0x000055555575b4f3 in Ffuncall_interactively (nargs=2, args=0x7fffffffdb58) at callint.c:250
#44 0x000055555575faf7 in Ffuncall (nargs=nargs@entry=3, args=args@entry=0x7fffffffdb50) at eval.c:3093
#45 0x000055555575cc53 in Fcall_interactively (function=<optimized out>, record_flag=<optimized out>, keys=<optimized out>) at callint.c:789
#46 0x00007fffef9330cd in F636f6d6d616e642d65786563757465_command_execute_0 ()
#47 0x000055555575faf7 in Ffuncall (nargs=nargs@entry=2, args=args@entry=0x7fffffffde50) at eval.c:3093
#48 0x00005555556e2247 in command_loop_1 () at lisp.h:1192
#49 0x000055555575e0d7 in internal_condition_case (bfun=bfun@entry=0x5555556e1e40 <command_loop_1>, handlers=handlers@entry=XIL(0x90), hfun=hfun@entry=0x5555556d63c0 <cmd_error>) at eval.c:1613
#50 0x00005555556ce07a in command_loop_2 (handlers=handlers@entry=XIL(0x90)) at keyboard.c:1168
#51 0x000055555575e019 in internal_catch (tag=tag@entry=XIL(0x11d30), func=func@entry=0x5555556ce050 <command_loop_2>, arg=arg@entry=XIL(0x90)) at eval.c:1292
#52 0x00005555556ce016 in command_loop () at lisp.h:1192
#53 0x00005555556d5f25 in recursive_edit_1 () at keyboard.c:754
#54 0x00005555556d62d4 in Frecursive_edit () at keyboard.c:837
#55 0x00005555555aebf4 in main (argc=<optimized out>, argv=<optimized out>) at emacs.c:2629

Lisp Backtrace:
"treesit--font-lock-fontify-region-1" (0xffffcc08)
"treesit-font-lock-fontify-region" (0xffffccb8)
"font-lock-fontify-syntactically-region" (0xffffce18)
"font-lock-default-fontify-region" (0xffffceb8)
"font-lock-fontify-region" (0xedea4040)
0x5681b288 PVEC_CLOSURE
"jit-lock--run-functions" (0xffffd158)
"jit-lock-fontify-now" (0xffffd258)
"font-lock-ensure" (0xffffd2d0)
"progn" (0xffffd3a0)
"progn" (0xffffd480)
"let" (0xffffd5d0)
"setq" (0xffffd6d0)
"elisp--eval-defun" (0xffffda00)
0xf060f638 PVEC_SUBR
"eval-defun" (0xffffdb60)
"funcall-interactively" (0xffffdb58)
"command-execute" (0xffffde58)





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#71681: 29.3.50; tree-sitter crash
  2024-06-20 16:33 bug#71681: 29.3.50; tree-sitter crash Juri Linkov
@ 2024-06-22 23:55 ` Yuan Fu
  2024-06-23  5:32   ` Eli Zaretskii
                     ` (2 more replies)
  0 siblings, 3 replies; 15+ messages in thread
From: Yuan Fu @ 2024-06-22 23:55 UTC (permalink / raw)
  To: Juri Linkov; +Cc: 71681



> On Jun 20, 2024, at 9:33 AM, Juri Linkov <juri@linkov.net> wrote:
> 
> Evaluating this expression causes a crash:
> 
> (progn
>  (find-file (expand-file-name "src/treesit.c" installation-directory))
>  (c-ts-mode)
>  (font-lock-ensure 63209 63387))
> 
> in latest master, but not in latest emacs-29 (only in 5-months old emacs-29).
> 
> If this is not reproducible, I could provide more details.
> 
> libtree-sitter is at the latest version.

Hmm, I can’t reproduce with latest master and libtree-sitter. Maybe you can send me the exact commits that you used?

Here’s mine:

Emacs: 72f2b01e318
Tree-sitter: 6ec478c1

Yuan




^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#71681: 29.3.50; tree-sitter crash
  2024-06-22 23:55 ` Yuan Fu
@ 2024-06-23  5:32   ` Eli Zaretskii
  2024-06-23  6:46   ` Juri Linkov
  2024-06-23 17:38   ` Juri Linkov
  2 siblings, 0 replies; 15+ messages in thread
From: Eli Zaretskii @ 2024-06-23  5:32 UTC (permalink / raw)
  To: Yuan Fu; +Cc: 71681, juri

> Cc: 71681@debbugs.gnu.org
> From: Yuan Fu <casouri@gmail.com>
> Date: Sat, 22 Jun 2024 16:55:38 -0700
> 
> 
> 
> > On Jun 20, 2024, at 9:33 AM, Juri Linkov <juri@linkov.net> wrote:
> > 
> > Evaluating this expression causes a crash:
> > 
> > (progn
> >  (find-file (expand-file-name "src/treesit.c" installation-directory))
> >  (c-ts-mode)
> >  (font-lock-ensure 63209 63387))
> > 
> > in latest master, but not in latest emacs-29 (only in 5-months old emacs-29).
> > 
> > If this is not reproducible, I could provide more details.
> > 
> > libtree-sitter is at the latest version.
> 
> Hmm, I can’t reproduce with latest master and libtree-sitter. Maybe you can send me the exact commits that you used?
> 
> Here’s mine:
> 
> Emacs: 72f2b01e318
> Tree-sitter: 6ec478c1

I can reproduce this with tree-sitter version 0.20.8.  Can you try
building Emacs with that version?  I know it's somewhat old, but given
the ABI breakage issue, I expect quite a few people avoid upgrading to
a later version (I didn't).





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#71681: 29.3.50; tree-sitter crash
  2024-06-22 23:55 ` Yuan Fu
  2024-06-23  5:32   ` Eli Zaretskii
@ 2024-06-23  6:46   ` Juri Linkov
  2024-06-23 17:38   ` Juri Linkov
  2 siblings, 0 replies; 15+ messages in thread
From: Juri Linkov @ 2024-06-23  6:46 UTC (permalink / raw)
  To: Yuan Fu; +Cc: 71681

>> Evaluating this expression causes a crash:
>>
>> (progn
>>  (find-file (expand-file-name "src/treesit.c" installation-directory))
>>  (c-ts-mode)
>>  (font-lock-ensure 63209 63387))
>>
>> in latest master, but not in latest emacs-29 (only in 5-months old emacs-29).
>>
>> If this is not reproducible, I could provide more details.
>>
>> libtree-sitter is at the latest version.
>
> Hmm, I can’t reproduce with latest master and libtree-sitter.
> Maybe you can send me the exact commits that you used?
>
> Here’s mine:
>
> Emacs: 72f2b01e318
> Tree-sitter: 6ec478c1

The commit are:

Emacs: 6f2036243f2 (2024-06-23, latest master)
Tree-sitter: 3da7deed (2024-06-08, version 0.22.6)

Also fails on old commits:
Emacs: ef01b634d21 (2024-01-18, emacs-29)
Tree-sitter: 870fb877 (2022-11-16, version 0.6.3)

But doesn't fail on:
Emacs: ce85d3811da (2024-06-18, recent emacs-29)
Tree-sitter: 3da7deed (2024-06-08, version 0.22.6)

Maybe it doesn't fail on recent emacs-29 because of the fix in 20af58d3a13?
But the same fix exists in latest master as well.





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#71681: 29.3.50; tree-sitter crash
  2024-06-22 23:55 ` Yuan Fu
  2024-06-23  5:32   ` Eli Zaretskii
  2024-06-23  6:46   ` Juri Linkov
@ 2024-06-23 17:38   ` Juri Linkov
  2024-06-24  7:46     ` Yuan Fu
  2 siblings, 1 reply; 15+ messages in thread
From: Juri Linkov @ 2024-06-23 17:38 UTC (permalink / raw)
  To: Yuan Fu; +Cc: 71681

>> Evaluating this expression causes a crash:
>>
>> (progn
>>  (find-file (expand-file-name "src/treesit.c" installation-directory))
>>  (c-ts-mode)
>>  (font-lock-ensure 63209 63387))
>>
>> in latest master, but not in latest emacs-29 (only in 5-months old emacs-29).
>>
>> If this is not reproducible, I could provide more details.
>>
>> libtree-sitter is at the latest version.
>
> Hmm, I can’t reproduce with latest master and libtree-sitter. Maybe you can send me the exact commits that you used?
>
> Here’s mine:
>
> Emacs: 72f2b01e318
> Tree-sitter: 6ec478c1

Probably reproducibility depends on the content of the src/treesit.c file.
Then the most reliable way to reproduce it is this:

0. emacs -Q
1. eval: (add-to-list 'major-mode-remap-alist '(c-mode . c-ts-mode))
2. C-x v L
3. in the *vc-change-log* buffer move point to the commit 20af58d3a13
4. type D
5. crash caused by diff-font-lock-syntax fontification that uses treesit

The numbers in (font-lock-ensure 63209 63387) above were extracted
from diff hunk boundaries that might be different when the file was edited.





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#71681: 29.3.50; tree-sitter crash
  2024-06-23 17:38   ` Juri Linkov
@ 2024-06-24  7:46     ` Yuan Fu
  2024-06-26  6:04       ` Yuan Fu
  0 siblings, 1 reply; 15+ messages in thread
From: Yuan Fu @ 2024-06-24  7:46 UTC (permalink / raw)
  To: Juri Linkov; +Cc: 71681



> On Jun 23, 2024, at 10:38 AM, Juri Linkov <juri@linkov.net> wrote:
> 
>>> Evaluating this expression causes a crash:
>>> 
>>> (progn
>>> (find-file (expand-file-name "src/treesit.c" installation-directory))
>>> (c-ts-mode)
>>> (font-lock-ensure 63209 63387))
>>> 
>>> in latest master, but not in latest emacs-29 (only in 5-months old emacs-29).
>>> 
>>> If this is not reproducible, I could provide more details.
>>> 
>>> libtree-sitter is at the latest version.
>> 
>> Hmm, I can’t reproduce with latest master and libtree-sitter. Maybe you can send me the exact commits that you used?
>> 
>> Here’s mine:
>> 
>> Emacs: 72f2b01e318
>> Tree-sitter: 6ec478c1
> 
> Probably reproducibility depends on the content of the src/treesit.c file.
> Then the most reliable way to reproduce it is this:
> 
> 0. emacs -Q
> 1. eval: (add-to-list 'major-mode-remap-alist '(c-mode . c-ts-mode))
> 2. C-x v L
> 3. in the *vc-change-log* buffer move point to the commit 20af58d3a13
> 4. type D
> 5. crash caused by diff-font-lock-syntax fontification that uses treesit
> 
> The numbers in (font-lock-ensure 63209 63387) above were extracted
> from diff hunk boundaries that might be different when the file was edited.

I reproduce it once with the first set of commits you provided, but for some reason couldn’t reproduce it again. I’m sure it’s something wrong that I did. I’ll report back when I make progress. TBH it seems like something wrong with tree-sitter itself, but I’ll make sure to figure out what’s the problem exactly.

Yuan




^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#71681: 29.3.50; tree-sitter crash
  2024-06-24  7:46     ` Yuan Fu
@ 2024-06-26  6:04       ` Yuan Fu
  2024-06-29 23:54         ` Yuan Fu
  0 siblings, 1 reply; 15+ messages in thread
From: Yuan Fu @ 2024-06-26  6:04 UTC (permalink / raw)
  To: Juri Linkov; +Cc: 71681



> On Jun 24, 2024, at 12:46 AM, Yuan Fu <casouri@gmail.com> wrote:
> 
> 
> 
>> On Jun 23, 2024, at 10:38 AM, Juri Linkov <juri@linkov.net> wrote:
>> 
>>>> Evaluating this expression causes a crash:
>>>> 
>>>> (progn
>>>> (find-file (expand-file-name "src/treesit.c" installation-directory))
>>>> (c-ts-mode)
>>>> (font-lock-ensure 63209 63387))
>>>> 
>>>> in latest master, but not in latest emacs-29 (only in 5-months old emacs-29).
>>>> 
>>>> If this is not reproducible, I could provide more details.
>>>> 
>>>> libtree-sitter is at the latest version.
>>> 
>>> Hmm, I can’t reproduce with latest master and libtree-sitter. Maybe you can send me the exact commits that you used?
>>> 
>>> Here’s mine:
>>> 
>>> Emacs: 72f2b01e318
>>> Tree-sitter: 6ec478c1
>> 
>> Probably reproducibility depends on the content of the src/treesit.c file.
>> Then the most reliable way to reproduce it is this:
>> 
>> 0. emacs -Q
>> 1. eval: (add-to-list 'major-mode-remap-alist '(c-mode . c-ts-mode))
>> 2. C-x v L
>> 3. in the *vc-change-log* buffer move point to the commit 20af58d3a13
>> 4. type D
>> 5. crash caused by diff-font-lock-syntax fontification that uses treesit
>> 
>> The numbers in (font-lock-ensure 63209 63387) above were extracted
>> from diff hunk boundaries that might be different when the file was edited.
> 
> I reproduce it once with the first set of commits you provided, but for some reason couldn’t reproduce it again. I’m sure it’s something wrong that I did. I’ll report back when I make progress. TBH it seems like something wrong with tree-sitter itself, but I’ll make sure to figure out what’s the problem exactly.
> 
> Yuan

Ok, I can reproduce it now. Looking into it…

Yuan






^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#71681: 29.3.50; tree-sitter crash
  2024-06-26  6:04       ` Yuan Fu
@ 2024-06-29 23:54         ` Yuan Fu
  2024-06-30 14:28           ` Vincenzo Pupillo
                             ` (3 more replies)
  0 siblings, 4 replies; 15+ messages in thread
From: Yuan Fu @ 2024-06-29 23:54 UTC (permalink / raw)
  To: Juri Linkov; +Cc: 71681



> On Jun 25, 2024, at 11:04 PM, Yuan Fu <casouri@gmail.com> wrote:
> 
> 
> 
>> On Jun 24, 2024, at 12:46 AM, Yuan Fu <casouri@gmail.com> wrote:
>> 
>> 
>> 
>>> On Jun 23, 2024, at 10:38 AM, Juri Linkov <juri@linkov.net> wrote:
>>> 
>>>>> Evaluating this expression causes a crash:
>>>>> 
>>>>> (progn
>>>>> (find-file (expand-file-name "src/treesit.c" installation-directory))
>>>>> (c-ts-mode)
>>>>> (font-lock-ensure 63209 63387))
>>>>> 
>>>>> in latest master, but not in latest emacs-29 (only in 5-months old emacs-29).
>>>>> 
>>>>> If this is not reproducible, I could provide more details.
>>>>> 
>>>>> libtree-sitter is at the latest version.
>>>> 
>>>> Hmm, I can’t reproduce with latest master and libtree-sitter. Maybe you can send me the exact commits that you used?
>>>> 
>>>> Here’s mine:
>>>> 
>>>> Emacs: 72f2b01e318
>>>> Tree-sitter: 6ec478c1
>>> 
>>> Probably reproducibility depends on the content of the src/treesit.c file.
>>> Then the most reliable way to reproduce it is this:
>>> 
>>> 0. emacs -Q
>>> 1. eval: (add-to-list 'major-mode-remap-alist '(c-mode . c-ts-mode))
>>> 2. C-x v L
>>> 3. in the *vc-change-log* buffer move point to the commit 20af58d3a13
>>> 4. type D
>>> 5. crash caused by diff-font-lock-syntax fontification that uses treesit
>>> 
>>> The numbers in (font-lock-ensure 63209 63387) above were extracted
>>> from diff hunk boundaries that might be different when the file was edited.
>> 
>> I reproduce it once with the first set of commits you provided, but for some reason couldn’t reproduce it again. I’m sure it’s something wrong that I did. I’ll report back when I make progress. TBH it seems like something wrong with tree-sitter itself, but I’ll make sure to figure out what’s the problem exactly.
>> 
>> Yuan
> 
> Ok, I can reproduce it now. Looking into it…

Finally figured out why. It’s not tree-sitter’s problem, but ours. I reduced the crash to a signal and pushed the fix to emacs-30. Next I’ll make sure the signal is properly handled. Below quoting the commit message:

The immediate cause of the crash is that tree-sitter accessed a node's
tree, but the tree is already deleted.

What happended, I think, is this:

1. Buffer modified, parser->need_reparse set to true,
parser->timestamp incremented.
2. A node is created from the parser, this node has the old tree but
the _new_ timestamp (bad!).
3. Parser re-parses (treesit_ensure_parsed), new tree created, old
tree deleted.
4. Ftreesit_query_capture accessed the old node, and the old tree,
crash.

We shouldn't bump the parser timestamp when we set
parser->need_reparse to true; instead, we should bump the timestamp
when we actually reparsed and created a new tree.

Yuan




^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#71681: 29.3.50; tree-sitter crash
  2024-06-29 23:54         ` Yuan Fu
@ 2024-06-30 14:28           ` Vincenzo Pupillo
  2024-06-30 16:15           ` Juri Linkov
                             ` (2 subsequent siblings)
  3 siblings, 0 replies; 15+ messages in thread
From: Vincenzo Pupillo @ 2024-06-30 14:28 UTC (permalink / raw)
  To: juri, 71681; +Cc: casouri

Today I did a git pull of the master branch.
Is it possible that this patch is the cause of this error?

Error muted by safe_call: (treesit--font-lock-mark-ranges-to-fontify ((1 . 
8867)) #<treesit-parser for php>) signaled (wrong-type-argument treesit-node-p 
#<treesit-parser for php>)
Error during redisplay: (jit-lock-function 1) signaled (wrong-type-argument 
treesit-node-p #<treesit-parser for php>)

Vincenzo

In data domenica 30 giugno 2024 01:54:39 CEST, Yuan Fu ha scritto:
> > On Jun 25, 2024, at 11:04 PM, Yuan Fu <casouri@gmail.com> wrote:
> >> On Jun 24, 2024, at 12:46 AM, Yuan Fu <casouri@gmail.com> wrote:
> >>> On Jun 23, 2024, at 10:38 AM, Juri Linkov <juri@linkov.net> wrote:
> >>>>> Evaluating this expression causes a crash:
> >>>>> 
> >>>>> (progn
> >>>>> (find-file (expand-file-name "src/treesit.c" installation-directory))
> >>>>> (c-ts-mode)
> >>>>> (font-lock-ensure 63209 63387))
> >>>>> 
> >>>>> in latest master, but not in latest emacs-29 (only in 5-months old
> >>>>> emacs-29).
> >>>>> 
> >>>>> If this is not reproducible, I could provide more details.
> >>>>> 
> >>>>> libtree-sitter is at the latest version.
> >>>> 
> >>>> Hmm, I can’t reproduce with latest master and libtree-sitter. Maybe you
> >>>> can send me the exact commits that you used?
> >>>> 
> >>>> Here’s mine:
> >>>> 
> >>>> Emacs: 72f2b01e318
> >>>> Tree-sitter: 6ec478c1
> >>> 
> >>> Probably reproducibility depends on the content of the src/treesit.c
> >>> file.
> >>> Then the most reliable way to reproduce it is this:
> >>> 
> >>> 0. emacs -Q
> >>> 1. eval: (add-to-list 'major-mode-remap-alist '(c-mode . c-ts-mode))
> >>> 2. C-x v L
> >>> 3. in the *vc-change-log* buffer move point to the commit 20af58d3a13
> >>> 4. type D
> >>> 5. crash caused by diff-font-lock-syntax fontification that uses treesit
> >>> 
> >>> The numbers in (font-lock-ensure 63209 63387) above were extracted
> >>> from diff hunk boundaries that might be different when the file was
> >>> edited.
> >> 
> >> I reproduce it once with the first set of commits you provided, but for
> >> some reason couldn’t reproduce it again. I’m sure it’s something wrong
> >> that I did. I’ll report back when I make progress. TBH it seems like
> >> something wrong with tree-sitter itself, but I’ll make sure to figure
> >> out what’s the problem exactly.
> >> 
> >> Yuan
> > 
> > Ok, I can reproduce it now. Looking into it…
> 
> Finally figured out why. It’s not tree-sitter’s problem, but ours. I reduced
> the crash to a signal and pushed the fix to emacs-30. Next I’ll make sure
> the signal is properly handled. Below quoting the commit message:
> 
> The immediate cause of the crash is that tree-sitter accessed a node's
> tree, but the tree is already deleted.
> 
> What happended, I think, is this:
> 
> 1. Buffer modified, parser->need_reparse set to true,
> parser->timestamp incremented.
> 2. A node is created from the parser, this node has the old tree but
> the _new_ timestamp (bad!).
> 3. Parser re-parses (treesit_ensure_parsed), new tree created, old
> tree deleted.
> 4. Ftreesit_query_capture accessed the old node, and the old tree,
> crash.
> 
> We shouldn't bump the parser timestamp when we set
> parser->need_reparse to true; instead, we should bump the timestamp
> when we actually reparsed and created a new tree.
> 
> Yuan









^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#71681: 29.3.50; tree-sitter crash
  2024-06-29 23:54         ` Yuan Fu
  2024-06-30 14:28           ` Vincenzo Pupillo
@ 2024-06-30 16:15           ` Juri Linkov
  2024-06-30 19:22           ` Vincenzo Pupillo
  2024-07-01  6:49           ` Juri Linkov
  3 siblings, 0 replies; 15+ messages in thread
From: Juri Linkov @ 2024-06-30 16:15 UTC (permalink / raw)
  To: Yuan Fu; +Cc: 71681

> Finally figured out why. It’s not tree-sitter’s problem, but
> ours. I reduced the crash to a signal and pushed the fix to
> emacs-30. Next I’ll make sure the signal is properly handled. Below
> quoting the commit message:
>
> The immediate cause of the crash is that tree-sitter accessed a node's
> tree, but the tree is already deleted.
>
> What happended, I think, is this:
>
> 1. Buffer modified, parser->need_reparse set to true,
> parser->timestamp incremented.
> 2. A node is created from the parser, this node has the old tree but
> the _new_ timestamp (bad!).
> 3. Parser re-parses (treesit_ensure_parsed), new tree created, old
> tree deleted.
> 4. Ftreesit_query_capture accessed the old node, and the old tree,
> crash.
>
> We shouldn't bump the parser timestamp when we set
> parser->need_reparse to true; instead, we should bump the timestamp
> when we actually reparsed and created a new tree.

Thank you very much.  I confirm there are no crashes anymore.





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#71681: 29.3.50; tree-sitter crash
  2024-06-29 23:54         ` Yuan Fu
  2024-06-30 14:28           ` Vincenzo Pupillo
  2024-06-30 16:15           ` Juri Linkov
@ 2024-06-30 19:22           ` Vincenzo Pupillo
  2024-07-01  5:37             ` Yuan Fu
  2024-07-01  6:49           ` Juri Linkov
  3 siblings, 1 reply; 15+ messages in thread
From: Vincenzo Pupillo @ 2024-06-30 19:22 UTC (permalink / raw)
  To: juri, 71681; +Cc: casouri

Today I did a git pull of the master branch.
Is it possible that this patch is the cause of this error?

Error muted by safe_call: (treesit--font-lock-mark-ranges-to-fontify ((1 . 
8867)) #<treesit-parser for php>) signaled (wrong-type-argument treesit-node-p 
#<treesit-parser for php>)
Error during redisplay: (jit-lock-function 1) signaled (wrong-type-argument 
treesit-node-p #<treesit-parser for php>)

Vincenzo

In data domenica 30 giugno 2024 01:54:39 CEST, Yuan Fu ha scritto:
> > On Jun 25, 2024, at 11:04 PM, Yuan Fu <casouri@gmail.com> wrote:
> >> On Jun 24, 2024, at 12:46 AM, Yuan Fu <casouri@gmail.com> wrote:
> >>> On Jun 23, 2024, at 10:38 AM, Juri Linkov <juri@linkov.net> wrote:
> >>>>> Evaluating this expression causes a crash:
> >>>>> 
> >>>>> (progn
> >>>>> (find-file (expand-file-name "src/treesit.c" installation-directory))
> >>>>> (c-ts-mode)
> >>>>> (font-lock-ensure 63209 63387))
> >>>>> 
> >>>>> in latest master, but not in latest emacs-29 (only in 5-months old
> >>>>> emacs-29).
> >>>>> 
> >>>>> If this is not reproducible, I could provide more details.
> >>>>> 
> >>>>> libtree-sitter is at the latest version.
> >>>> 
> >>>> Hmm, I can’t reproduce with latest master and libtree-sitter. Maybe you
> >>>> can send me the exact commits that you used?
> >>>> 
> >>>> Here’s mine:
> >>>> 
> >>>> Emacs: 72f2b01e318
> >>>> Tree-sitter: 6ec478c1
> >>> 
> >>> Probably reproducibility depends on the content of the src/treesit.c
> >>> file.
> >>> Then the most reliable way to reproduce it is this:
> >>> 
> >>> 0. emacs -Q
> >>> 1. eval: (add-to-list 'major-mode-remap-alist '(c-mode . c-ts-mode))
> >>> 2. C-x v L
> >>> 3. in the *vc-change-log* buffer move point to the commit 20af58d3a13
> >>> 4. type D
> >>> 5. crash caused by diff-font-lock-syntax fontification that uses treesit
> >>> 
> >>> The numbers in (font-lock-ensure 63209 63387) above were extracted
> >>> from diff hunk boundaries that might be different when the file was
> >>> edited.
> >> 
> >> I reproduce it once with the first set of commits you provided, but for
> >> some reason couldn’t reproduce it again. I’m sure it’s something wrong
> >> that I did. I’ll report back when I make progress. TBH it seems like
> >> something wrong with tree-sitter itself, but I’ll make sure to figure
> >> out what’s the problem exactly.
> >> 
> >> Yuan
> > 
> > Ok, I can reproduce it now. Looking into it…
> 
> Finally figured out why. It’s not tree-sitter’s problem, but ours. I reduced
> the crash to a signal and pushed the fix to emacs-30. Next I’ll make sure
> the signal is properly handled. Below quoting the commit message:
> 
> The immediate cause of the crash is that tree-sitter accessed a node's
> tree, but the tree is already deleted.
> 
> What happended, I think, is this:
> 
> 1. Buffer modified, parser->need_reparse set to true,
> parser->timestamp incremented.
> 2. A node is created from the parser, this node has the old tree but
> the _new_ timestamp (bad!).
> 3. Parser re-parses (treesit_ensure_parsed), new tree created, old
> tree deleted.
> 4. Ftreesit_query_capture accessed the old node, and the old tree,
> crash.
> 
> We shouldn't bump the parser timestamp when we set
> parser->need_reparse to true; instead, we should bump the timestamp
> when we actually reparsed and created a new tree.
> 
> Yuan












^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#71681: 29.3.50; tree-sitter crash
  2024-06-30 19:22           ` Vincenzo Pupillo
@ 2024-07-01  5:37             ` Yuan Fu
  2024-07-01 10:20               ` Vincenzo Pupillo
  0 siblings, 1 reply; 15+ messages in thread
From: Yuan Fu @ 2024-07-01  5:37 UTC (permalink / raw)
  To: Vincenzo Pupillo; +Cc: 71681, juri



> On Jun 30, 2024, at 12:22 PM, Vincenzo Pupillo <v.pupillo@gmail.com> wrote:
> 
> Today I did a git pull of the master branch.
> Is it possible that this patch is the cause of this error?
> 
> Error muted by safe_call: (treesit--font-lock-mark-ranges-to-fontify ((1 . 
> 8867)) #<treesit-parser for php>) signaled (wrong-type-argument treesit-node-p 
> #<treesit-parser for php>)
> Error during redisplay: (jit-lock-function 1) signaled (wrong-type-argument 
> treesit-node-p #<treesit-parser for php>)
> 
> Vincenzo

Embarrassingly, yes. I made a typo and didn’t catch it. It should be fixed now (on emacs-30).

Yuan




^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#71681: 29.3.50; tree-sitter crash
  2024-06-29 23:54         ` Yuan Fu
                             ` (2 preceding siblings ...)
  2024-06-30 19:22           ` Vincenzo Pupillo
@ 2024-07-01  6:49           ` Juri Linkov
  2024-07-01  7:01             ` Yuan Fu
  3 siblings, 1 reply; 15+ messages in thread
From: Juri Linkov @ 2024-07-01  6:49 UTC (permalink / raw)
  To: Yuan Fu; +Cc: 71681

> I reduced the crash to a signal and pushed the fix to emacs-30.
> Next I’ll make sure the signal is properly handled.

Now with the latest emacs-30 at the commit b2c966f8396
there is another problem:

0. emacs -Q
1. eval: (setq backtrace-on-redisplay-error t)
2. eval: (add-to-list 'major-mode-remap-alist '(c-mode . c-ts-mode))
3. C-x v L
4. in the *vc-change-log* buffer move point to the commit b2c966f8396
5. type D

Warning (error): Error in a redisplay Lisp hook.
See buffer *Redisplay-trace*

Error: treesit-node-outdated (#<treesit-node-outdated>)
  treesit--font-lock-fontify-region-1(#<treesit-node-outdated> #<treesit-compiled-query> 99654 99975 nil nil)
  treesit-font-lock-fontify-region(99654 99975 nil)
  font-lock-fontify-syntactically-region(99654 99975 nil)
  font-lock-default-fontify-region(99654 99974 nil)
  font-lock-fontify-region(99654 99974)
  font-lock-ensure(99654 99974)
  diff-syntax-fontify-hunk(122 539 t)
  diff-syntax-fontify(122 539)
  diff--font-lock-syntax(539)
  font-lock-fontify-keywords-region(1 539 nil)
  font-lock-default-fontify-region(1 539 nil)
  font-lock-fontify-region(1 539)
  jit-lock--run-functions(1 539)
  jit-lock-fontify-now(1 539)
  jit-lock-function(1)
  vc-diff-finish(#<buffer *vc-diff*> nil nil)
  vc-exec-after(#f(compiled-function () #<bytecode -0xcd6e6e57937525e>))
  log-view-diff-common(1 1 t)
  log-view-diff-changeset(1 1)
  funcall-interactively(log-view-diff-changeset 1 1)
  command-execute(log-view-diff-changeset)





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#71681: 29.3.50; tree-sitter crash
  2024-07-01  6:49           ` Juri Linkov
@ 2024-07-01  7:01             ` Yuan Fu
  0 siblings, 0 replies; 15+ messages in thread
From: Yuan Fu @ 2024-07-01  7:01 UTC (permalink / raw)
  To: Juri Linkov; +Cc: 71681



> On Jun 30, 2024, at 11:49 PM, Juri Linkov <juri@linkov.net> wrote:
> 
>> I reduced the crash to a signal and pushed the fix to emacs-30.
>> Next I’ll make sure the signal is properly handled.
> 
> Now with the latest emacs-30 at the commit b2c966f8396
> there is another problem:
> 
> 0. emacs -Q
> 1. eval: (setq backtrace-on-redisplay-error t)
> 2. eval: (add-to-list 'major-mode-remap-alist '(c-mode . c-ts-mode))
> 3. C-x v L
> 4. in the *vc-change-log* buffer move point to the commit b2c966f8396
> 5. type D
> 
> Warning (error): Error in a redisplay Lisp hook.
> See buffer *Redisplay-trace*
> 
> Error: treesit-node-outdated (#<treesit-node-outdated>)
>  treesit--font-lock-fontify-region-1(#<treesit-node-outdated> #<treesit-compiled-query> 99654 99975 nil nil)
>  treesit-font-lock-fontify-region(99654 99975 nil)
>  font-lock-fontify-syntactically-region(99654 99975 nil)
>  font-lock-default-fontify-region(99654 99974 nil)
>  font-lock-fontify-region(99654 99974)
>  font-lock-ensure(99654 99974)
>  diff-syntax-fontify-hunk(122 539 t)
>  diff-syntax-fontify(122 539)
>  diff--font-lock-syntax(539)
>  font-lock-fontify-keywords-region(1 539 nil)
>  font-lock-default-fontify-region(1 539 nil)
>  font-lock-fontify-region(1 539)
>  jit-lock--run-functions(1 539)
>  jit-lock-fontify-now(1 539)
>  jit-lock-function(1)
>  vc-diff-finish(#<buffer *vc-diff*> nil nil)
>  vc-exec-after(#f(compiled-function () #<bytecode -0xcd6e6e57937525e>))
>  log-view-diff-common(1 1 t)
>  log-view-diff-changeset(1 1)
>  funcall-interactively(log-view-diff-changeset 1 1)
>  command-execute(log-view-diff-changeset)

Yes, that’s what meant by “reduced crash to signal”. The crash is fixed, but I need to fix the font-lock code so it can handle the signal gracefully (or don’t cause the signal from the first place). It’s not yet clear to me why does treesit-font-lock-fontify-region end up using an outdated node for query.

Yuan




^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#71681: 29.3.50; tree-sitter crash
  2024-07-01  5:37             ` Yuan Fu
@ 2024-07-01 10:20               ` Vincenzo Pupillo
  0 siblings, 0 replies; 15+ messages in thread
From: Vincenzo Pupillo @ 2024-07-01 10:20 UTC (permalink / raw)
  To: Yuan Fu; +Cc: 71681, juri

Thank you Yuan!
Vincenzo

In data lunedì 1 luglio 2024 07:37:40 CEST, Yuan Fu ha scritto:
> 
> > On Jun 30, 2024, at 12:22 PM, Vincenzo Pupillo <v.pupillo@gmail.com> wrote:
> > 
> > Today I did a git pull of the master branch.
> > Is it possible that this patch is the cause of this error?
> > 
> > Error muted by safe_call: (treesit--font-lock-mark-ranges-to-fontify ((1 . 
> > 8867)) #<treesit-parser for php>) signaled (wrong-type-argument treesit-node-p 
> > #<treesit-parser for php>)
> > Error during redisplay: (jit-lock-function 1) signaled (wrong-type-argument 
> > treesit-node-p #<treesit-parser for php>)
> > 
> > Vincenzo
> 
> Embarrassingly, yes. I made a typo and didn’t catch it. It should be fixed now (on emacs-30).
> 
> Yuan
> 








^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2024-07-01 10:20 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-20 16:33 bug#71681: 29.3.50; tree-sitter crash Juri Linkov
2024-06-22 23:55 ` Yuan Fu
2024-06-23  5:32   ` Eli Zaretskii
2024-06-23  6:46   ` Juri Linkov
2024-06-23 17:38   ` Juri Linkov
2024-06-24  7:46     ` Yuan Fu
2024-06-26  6:04       ` Yuan Fu
2024-06-29 23:54         ` Yuan Fu
2024-06-30 14:28           ` Vincenzo Pupillo
2024-06-30 16:15           ` Juri Linkov
2024-06-30 19:22           ` Vincenzo Pupillo
2024-07-01  5:37             ` Yuan Fu
2024-07-01 10:20               ` Vincenzo Pupillo
2024-07-01  6:49           ` Juri Linkov
2024-07-01  7:01             ` Yuan Fu

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).