From 0ea58f87f45873b57e723bd9c6051c24ffa805f2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Harald=20J=C3=B6rg?= Date: Thu, 16 May 2024 22:22:37 +0200 Subject: [PATCH] ; cperl-mode.el: prevent Emacs from "freezing" (Bug#70948) * cperl-mode.el (defconst): Replace the rx expression for `cperl--basic-identifier-rx' with its actual macro expansion. This makes it efficient under Emacs 29.3, where the expansion by rx.el could make Emacs freeze with a crafted Perl source (Bug#70948). (cherry picked from commit 54a7268763138fdc63bf81feca99013b01337872) --- lisp/progmodes/cperl-mode.el | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index 81ecb535b82..cbc23507fca 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el @@ -1178,7 +1178,12 @@ The expansion is entirely correct because it uses the C preprocessor." (eval-and-compile (defconst cperl--basic-identifier-rx - '(sequence (or alpha "_") (* (or word "_"))) + ;; The rx expression in the following line is a workaround for + ;; bug#70948 under Emacs 29 + '(regex "[_[:alpha:]][_[:word:]]*") + ;; The rx expression in the following line is equivalent but + ;; inefficient under Emacs 29.3 + ;; '(sequence (or alpha "_") (* (or word "_"))) "A regular expression for the name of a \"basic\" Perl variable. Neither namespace separators nor sigils are included. As is, this regular expression applies to labels,subroutine calls where -- 2.39.5