summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Heytings <gregory@heytings.org>2023-03-18 10:49:29 +0000
committerGregory Heytings <gregory@heytings.org>2023-03-18 11:51:32 +0100
commit0eddfa28ebdba3b1e5b3249416f14ea67bd41e3c (patch)
tree2fadbac295e64fc962f81e25853ba35cd2dde91b
parent647c6bf2a6ce7113de5dae251633eaba27627a62 (diff)
downloademacs-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.el9
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)