]> git.eshelyaron.com Git - emacs.git/commitdiff
xml: Fix parsing of default namespace with quoted names
authorDavid Engster <deng@randomsample.de>
Tue, 24 Jan 2017 21:47:53 +0000 (22:47 +0100)
committerDavid Engster <deng@randomsample.de>
Tue, 24 Jan 2017 21:56:05 +0000 (22:56 +0100)
* lisp/xml.el (xml-parse-attlist): Properly extract namespace when
  parsing is done with quoted symbol names (bug#23440).
* test/lisp/xml-tests.el (xml-parse-test--default-namespace-qnames)
  (xml-parse-test-default-namespace-qnames): Test for the above.

lisp/xml.el
test/lisp/xml-tests.el

index cd801be308330a153b7a8f7afc08d868535030b7..be2ac96f264f321e4cf003f889f0cdbf831eb212 100644 (file)
@@ -646,8 +646,10 @@ surpassed `xml-entity-expansion-limit'"))))
 (defun xml-parse-attlist (&optional xml-ns)
   "Return the attribute-list after point.
 Leave point at the first non-blank character after the tag."
-  (let ((attlist ())
-       end-pos name)
+  (let* ((attlist ())
+        (symbol-qnames (eq (car-safe xml-ns) 'symbol-qnames))
+        (xml-ns (if symbol-qnames (cdr xml-ns) xml-ns))
+        end-pos name)
     (skip-syntax-forward " ")
     (while (looking-at (eval-when-compile
                         (concat "\\(" xml-name-re "\\)\\s-*=\\s-*")))
index 0f2182a6a7542d8c9d8ee8cd4a67b430ba526235..d0da2094db70cccdcfa351ddd8410c0b0fd5264f 100644 (file)
@@ -134,6 +134,21 @@ Parser is called with and without 'symbol-qnames argument.")
                            (append xml-default-ns
                                    '(("F" . "FOOBAR:"))))))))))
 
+;; Test bug #23440 (proper expansion of default namespace)
+; Test data for default namespace
+(defvar xml-parse-test--default-namespace-qnames
+  (cons "<something xmlns=\"myns:\"><whatever></whatever></something>"
+        '((myns:something
+           ((("http://www.w3.org/2000/xmlns/" . "")
+             . "myns:"))
+           (myns:whatever nil)))))
+
+(ert-deftest xml-parse-test-default-namespace-qnames ()
+  (with-temp-buffer
+    (insert (car xml-parse-test--default-namespace-qnames))
+    (should (equal (cdr xml-parse-test--default-namespace-qnames)
+                   (xml-parse-region nil nil nil nil 'symbol-qnames)))))
+
 ;; Local Variables:
 ;; no-byte-compile: t
 ;; End: