From a0446c2c984695c7c7a0b938b84f75126d6b5b5c Mon Sep 17 00:00:00 2001 From: Yuan Fu Date: Sat, 1 Jun 2024 10:33:18 -0700 Subject: [PATCH] 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) --- lisp/treesit.el | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) 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. -- 2.39.5