changeset 109288:e24d55cee016

* xml.el (xml-parse-region): Avoid infloop (Bug#5281).
author Chong Yidong <cyd@stupidchicken.com>
date Wed, 30 Jun 2010 16:34:06 -0400
parents a18863f338c2
children ef318d39a3e6
files lisp/ChangeLog lisp/xml.el
diffstat 2 files changed, 18 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Wed Jun 30 10:22:18 2010 -0400
+++ b/lisp/ChangeLog	Wed Jun 30 16:34:06 2010 -0400
@@ -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)
--- a/lisp/xml.el	Wed Jun 30 10:22:18 2010 -0400
+++ b/lisp/xml.el	Wed Jun 30 16:34:06 2010 -0400
@@ -321,18 +321,20 @@
 		(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))