]> git.eshelyaron.com Git - emacs.git/commitdiff
* xml.el (xml-parse-dtd): Use proper regexps for ELEMENT declarations.
authorChong Yidong <cyd@gnu.org>
Sun, 1 Jul 2012 11:05:17 +0000 (19:05 +0800)
committerChong Yidong <cyd@gnu.org>
Sun, 1 Jul 2012 11:05:17 +0000 (19:05 +0800)
* test/automated/xml-parse-tests.el: Update testcase.

Fixes: debbugs:7172
lisp/ChangeLog
lisp/xml.el
test/automated/xml-parse-tests.el

index 3156dc412e32431be5793784cf9b6245298c12d5..d6ad29309e7eb78a3601d61ced6f5186f5b18686 100644 (file)
@@ -7,6 +7,7 @@
        Use xml--parse-buffer.
        (xml-parse-file): Use xml--parse-buffer.
        (xml-parse-dtd): Make parameter entity substitution work right.
+       Use proper regexps for ELEMENT declarations (Bug#7172).
 
 2012-06-30  Glenn Morris  <rgm@gnu.org>
 
index 841e19a174a0322e5b280f036ce22f77407ae373..5c1d2390a23558d1fb2bbf17bfda053ca2fd62fb 100644 (file)
@@ -651,7 +651,9 @@ This follows the rule [28] in the XML specifications."
        (skip-syntax-forward " ")
        (cond
         ;; Element declaration [45]:
-        ((and (looking-at "<!ELEMENT\\s-+\\([[:alnum:].%;]+\\)\\s-+\\([^>]+\\)>")
+        ((and (looking-at (eval-when-compile
+                            (concat "<!ELEMENT\\s-+\\(" xml-name-re
+                                    "\\)\\s-+\\([^>]+\\)>")))
               (or (null next-parameter-entity)
                   (<= (match-end 0) next-parameter-entity)))
          (let ((element (match-string-no-properties 1))
@@ -659,13 +661,14 @@ This follows the rule [28] in the XML specifications."
                (end-pos (match-end 0)))
            ;; Translation of rule [46] of XML specifications
            (cond
-            ((string-match "^EMPTY[ \t\n\r]*$" type)       ; empty declaration
+            ((string-match "\\`EMPTY\\s-*\\'" type)  ; empty declaration
              (setq type 'empty))
-            ((string-match "^ANY[ \t\n\r]*$" type)         ; any type of contents
+            ((string-match "\\`ANY\\s-*$" type)      ; any type of contents
              (setq type 'any))
-            ((string-match "^(\\(.*\\))[ \t\n\r]*$" type)  ; children ([47])
-             (setq type (xml-parse-elem-type (match-string-no-properties 1 type))))
-            ((string-match "^%[^;]+;[ \t\n\r]*$" type)   ; substitution
+            ((string-match "\\`(\\(.*\\))\\s-*\\'" type) ; children ([47])
+             (setq type (xml-parse-elem-type
+                         (match-string-no-properties 1 type))))
+            ((string-match "^%[^;]+;[ \t\n\r]*\\'" type) ; substitution
              nil)
             (xml-validating-parser
              (error "XML: (Validity) Invalid element type in the DTD")))
index 8e8ef291bdcad8c9f6f05fb08e4783def7cc53c7..8322a8c6ff9939b2c9692b3862e4e70e83cfcb2f 100644 (file)
      ((foo ((a . "b")) (bar nil "AbC;"))))
     ;; Tricky parameter entity substitution (like XML spec Appendix D)
     ("<?xml version='1.0'?><!DOCTYPE foo [ <!ENTITY % xx '&#37;zz;'><!ENTITY % zz '&#60;!ENTITY ent \"b\" >' > %xx; ]><foo>A&ent;C</foo>" .
-     ((foo nil "AbC"))))
+     ((foo nil "AbC")))
+    ;; Bug#7172
+    ("<?xml version=\"1.0\"?><!DOCTYPE foo [ <!ELEMENT EXAM_PLE EMPTY> ]><foo></foo>" .
+     ((foo nil))))
   "Alist of XML strings and their expected parse trees.")
 
 (ert-deftest xml-parse-tests ()