From: Yuan Fu Date: Sat, 1 Jun 2024 17:33:18 +0000 (-0700) Subject: Fix treesit-parse-string crash (bug#71012) X-Git-Tag: archive/raspbian/1%29.4+1-4+rpi1~1^2~2^2~17^2~16 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=00360258caddc0d8cf29ba3d9971125a06f8959b;p=emacs.git Fix treesit-parse-string crash (bug#71012) Parsing a large file with treesit-parse-string and then printing the returned node crashes Emacs, because with-temp-buffer kills the temp buffer when treesit-parse-string returns, and print.c tries to access the node's position in the killed buffer. * lisp/treesit.el (treesit-parse-string): Don't use with-temp-buffer. --- diff --git a/lisp/treesit.el b/lisp/treesit.el index 2676ed932dc..151d9302786 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -122,10 +122,13 @@ of max unsigned 32-bit value for byte offsets into buffer text." (defun treesit-parse-string (string language) "Parse STRING using a parser for LANGUAGE. Return the root node of the syntax tree." - (with-temp-buffer - (insert string) - (treesit-parser-root-node - (treesit-parser-create language)))) + ;; We can't use `with-temp-buffer' because it kills the buffer when + ;; returning from the form. + (let ((buf (generate-new-buffer " *treesit-parse-string*"))) + (with-current-buffer buf + (insert string) + (treesit-parser-root-node + (treesit-parser-create language))))) (defvar-local treesit-language-at-point-function nil "A function that returns the language at point.