From: Yuan Fu Date: Sat, 1 Jun 2024 17:33:18 +0000 (-0700) Subject: Fix treesit-parse-string crash (bug#71012) X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a0446c2c984695c7c7a0b938b84f75126d6b5b5c;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. (cherry picked from commit 00360258caddc0d8cf29ba3d9971125a06f8959b) --- diff --git a/lisp/treesit.el b/lisp/treesit.el index bcabf98f1d1..ee67c2349f9 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -126,10 +126,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.