[v2 PATCH 4/7] xmllite/reader: Return correct error for multiple colons in qualified name

Nikolay Sivov nsivov at codeweavers.com
Fri Mar 10 02:06:41 CST 2017


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/xmllite/reader.c       | 9 ++++++---
 dlls/xmllite/tests/reader.c | 2 ++
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c
index 056721edb6..c9ab4e1593 100644
--- a/dlls/xmllite/reader.c
+++ b/dlls/xmllite/reader.c
@@ -1838,7 +1838,7 @@ static HRESULT reader_parse_dtd(xmlreader *reader)
 }
 
 /* [11 NS] LocalPart ::= NCName */
-static HRESULT reader_parse_local(xmlreader *reader, strval *local)
+static HRESULT reader_parse_local(xmlreader *reader, strval *local, BOOL check_for_separator)
 {
     WCHAR *ptr;
     UINT start;
@@ -1860,6 +1860,9 @@ static HRESULT reader_parse_local(xmlreader *reader, strval *local)
         ptr = reader_get_ptr(reader);
     }
 
+    if (check_for_separator && *ptr == ':')
+        return NC_E_QNAMECOLON;
+
     if (is_reader_pending(reader))
     {
          reader->resume[XmlReadResume_Local] = start;
@@ -1898,7 +1901,7 @@ static HRESULT reader_parse_qname(xmlreader *reader, strval *prefix, strval *loc
 
     if (reader->resume[XmlReadResume_Local])
     {
-        hr = reader_parse_local(reader, local);
+        hr = reader_parse_local(reader, local, FALSE);
         if (FAILED(hr)) return hr;
 
         reader_init_strvalue(reader->resume[XmlReadResume_Name],
@@ -1923,7 +1926,7 @@ static HRESULT reader_parse_qname(xmlreader *reader, strval *prefix, strval *loc
 
             /* skip ':' */
             reader_skipn(reader, 1);
-            hr = reader_parse_local(reader, local);
+            hr = reader_parse_local(reader, local, TRUE);
             if (FAILED(hr)) return hr;
         }
         else
diff --git a/dlls/xmllite/tests/reader.c b/dlls/xmllite/tests/reader.c
index 4318a29b76..a44af67707 100644
--- a/dlls/xmllite/tests/reader.c
+++ b/dlls/xmllite/tests/reader.c
@@ -1415,6 +1415,8 @@ static struct test_entry element_tests[] = {
     { "<a >", "a", "", S_OK },
     { "<a \r \t\n>", "a", "", S_OK },
     { "</a>", NULL, NULL, NC_E_QNAMECHARACTER },
+    { "<a:b:c />", NULL, NULL, NC_E_QNAMECOLON },
+    { "<:b:c />", NULL, NULL, NC_E_QNAMECHARACTER },
     { NULL }
 };
 
-- 
2.11.0




More information about the wine-patches mailing list