diff options
author | Gregory Heytings <gregory@heytings.org> | 2023-03-18 10:49:29 +0000 |
---|---|---|
committer | Gregory Heytings <gregory@heytings.org> | 2023-03-18 11:51:32 +0100 |
commit | 0eddfa28ebdba3b1e5b3249416f14ea67bd41e3c (patch) | |
tree | 2fadbac295e64fc962f81e25853ba35cd2dde91b | |
parent | 647c6bf2a6ce7113de5dae251633eaba27627a62 (diff) | |
download | emacs-0eddfa28ebdba3b1e5b3249416f14ea67bd41e3c.tar.gz |
Avoid slowdowns in xmltok-scan-attributes
* lisp/nxml/xmltok.el (xmltok-scan-attributes): Limit the search
to 10000 characters, to avoid slowdowns due to the quadratic
complexity of the regexp. Suggested by Stefan Monnier.
-rw-r--r-- | lisp/nxml/xmltok.el | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lisp/nxml/xmltok.el b/lisp/nxml/xmltok.el index c36d225c7c9..fb852e5ea5e 100644 --- a/lisp/nxml/xmltok.el +++ b/lisp/nxml/xmltok.el @@ -734,8 +734,13 @@ and VALUE-END, otherwise a STRING giving the value." (atts-needing-normalization nil)) (while (cond ((or (looking-at (xmltok-attribute regexp)) ;; use non-greedy group - (when (looking-at (concat "[^<>\n]+?" - (xmltok-attribute regexp))) + ;; Limit the search to 10000 characters, to + ;; avoid slowdowns due to the quadratic + ;; complexity of the regexp. See bug#61514. + (when (with-restriction + (point) (+ (point) 10000) + (looking-at (concat "[^<>\n]+?" + (xmltok-attribute regexp)))) (unless recovering (xmltok-add-error "Malformed attribute" (point) |