summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog4
-rw-r--r--lisp/xml.el26
2 files changed, 18 insertions, 12 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index b634bcd7896..45d12bff8db 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,7 @@
+2010-06-30 Chong Yidong <cyd@stupidchicken.com>
+
+ * xml.el (xml-parse-region): Avoid infloop (Bug#5281).
+
2010-06-29 Leo <sdl.web@gmail.com>
* emacs-lisp/rx.el (rx): Doc fix. (Bug#6537)
diff --git a/lisp/xml.el b/lisp/xml.el
index 20b595fd2d7..8e8981ac439 100644
--- a/lisp/xml.el
+++ b/lisp/xml.el
@@ -321,18 +321,20 @@ If PARSE-NS is non-nil, then QNAMES are expanded."
(progn
(forward-char -1)
(setq result (xml-parse-tag parse-dtd parse-ns))
- (if (and xml result (not xml-sub-parser))
- ;; translation of rule [1] of XML specifications
- (error "XML: (Not Well-Formed) Only one root tag allowed")
- (cond
- ((null result))
- ((and (listp (car result))
- parse-dtd)
- (setq dtd (car result))
- (if (cdr result) ; possible leading comment
- (add-to-list 'xml (cdr result))))
- (t
- (add-to-list 'xml result)))))
+ (cond
+ ((null result)
+ ;; Not looking at an xml start tag.
+ (forward-char 1))
+ ((and xml (not xml-sub-parser))
+ ;; Translation of rule [1] of XML specifications
+ (error "XML: (Not Well-Formed) Only one root tag allowed"))
+ ((and (listp (car result))
+ parse-dtd)
+ (setq dtd (car result))
+ (if (cdr result) ; possible leading comment
+ (add-to-list 'xml (cdr result))))
+ (t
+ (add-to-list 'xml result))))
(goto-char (point-max))))
(if parse-dtd
(cons dtd (nreverse xml))