From 52f91932acd26ababbb6fad9434107cafccc2ccf Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Fri, 10 Mar 2017 11:06:39 +0300 Subject: [PATCH] xmllite/reader: Explicitly return empty static string as local name for nodes without names. Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- dlls/xmllite/reader.c | 15 ++++++++------- dlls/xmllite/tests/reader.c | 22 +++++++--------------- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c index 1805758a31c..1dba23cde23 100644 --- a/dlls/xmllite/reader.c +++ b/dlls/xmllite/reader.c @@ -1353,7 +1353,6 @@ static HRESULT reader_parse_comment(xmlreader *reader) reader->nodetype = XmlNodeType_Comment; reader->resume[XmlReadResume_Body] = start; reader->resumestate = XmlReadResumeState_Comment; - reader_set_strvalue(reader, StringValue_LocalName, NULL); reader_set_strvalue(reader, StringValue_QualifiedName, NULL); reader_set_strvalue(reader, StringValue_Value, NULL); } @@ -1376,7 +1375,6 @@ static HRESULT reader_parse_comment(xmlreader *reader) /* skip rest of markup '->' */ reader_skipn(reader, 3); - reader_set_strvalue(reader, StringValue_LocalName, &strval_empty); reader_set_strvalue(reader, StringValue_QualifiedName, &strval_empty); reader_set_strvalue(reader, StringValue_Value, &value); reader->resume[XmlReadResume_Body] = 0; @@ -2343,7 +2341,6 @@ static HRESULT reader_parse_cdata(xmlreader *reader) reader->nodetype = XmlNodeType_CDATA; reader->resume[XmlReadResume_Body] = start; reader->resumestate = XmlReadResumeState_CDATA; - reader_set_strvalue(reader, StringValue_LocalName, NULL); reader_set_strvalue(reader, StringValue_QualifiedName, NULL); reader_set_strvalue(reader, StringValue_Value, NULL); } @@ -2360,7 +2357,6 @@ static HRESULT reader_parse_cdata(xmlreader *reader) reader_skipn(reader, 3); TRACE("%s\n", debug_strval(reader, &value)); - reader_set_strvalue(reader, StringValue_LocalName, &strval_empty); reader_set_strvalue(reader, StringValue_QualifiedName, &strval_empty); reader_set_strvalue(reader, StringValue_Value, &value); reader->resume[XmlReadResume_Body] = 0; @@ -2404,7 +2400,6 @@ static HRESULT reader_parse_chardata(xmlreader *reader) reader->nodetype = is_wchar_space(*ptr) ? XmlNodeType_Whitespace : XmlNodeType_Text; reader->resume[XmlReadResume_Body] = start; reader->resumestate = XmlReadResumeState_CharData; - reader_set_strvalue(reader, StringValue_LocalName, &strval_empty); reader_set_strvalue(reader, StringValue_QualifiedName, &strval_empty); reader_set_strvalue(reader, StringValue_Value, NULL); } @@ -3090,7 +3085,6 @@ static HRESULT WINAPI xmlreader_GetNamespaceUri(IXmlReader* iface, const WCHAR * static HRESULT WINAPI xmlreader_GetLocalName(IXmlReader* iface, LPCWSTR *name, UINT *len) { xmlreader *This = impl_from_IXmlReader(iface); - XmlNodeType nodetype; UINT length; TRACE("(%p)->(%p %p)\n", This, name, len); @@ -3098,8 +3092,15 @@ static HRESULT WINAPI xmlreader_GetLocalName(IXmlReader* iface, LPCWSTR *name, U if (!len) len = &length; - switch ((nodetype = reader_get_nodetype(This))) + switch (reader_get_nodetype(This)) { + case XmlNodeType_Text: + case XmlNodeType_CDATA: + case XmlNodeType_Comment: + case XmlNodeType_Whitespace: + *name = emptyW; + *len = 0; + break; case XmlNodeType_Element: case XmlNodeType_EndElement: /* empty elements are not added to the stack */ diff --git a/dlls/xmllite/tests/reader.c b/dlls/xmllite/tests/reader.c index 208e4be9774..31b5ce85fd5 100644 --- a/dlls/xmllite/tests/reader.c +++ b/dlls/xmllite/tests/reader.c @@ -1010,19 +1010,15 @@ static void test_read_comment(void) str = NULL; hr = IXmlReader_GetLocalName(reader, &str, &len); ok(hr == S_OK, "got 0x%08x\n", hr); - ok(len == strlen(test->name), "got %u\n", len); - str_exp = a2w(test->name); - ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str)); - free_str(str_exp); + ok(len == 0, "got %u\n", len); + ok(*str == 0, "got %s\n", wine_dbgstr_w(str)); len = 1; str = NULL; hr = IXmlReader_GetQualifiedName(reader, &str, &len); ok(hr == S_OK, "got 0x%08x\n", hr); - ok(len == strlen(test->name), "got %u\n", len); - str_exp = a2w(test->name); - ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str)); - free_str(str_exp); + ok(len == 0, "got %u\n", len); + ok(*str == 0, "got %s\n", wine_dbgstr_w(str)); /* value */ len = 1; @@ -1696,21 +1692,17 @@ static void test_read_cdata(void) ok(type == XmlNodeType_CDATA, "got %d for %s\n", type, test->xml); - str_exp = a2w(test->name); - len = 1; str = NULL; hr = IXmlReader_GetLocalName(reader, &str, &len); ok(hr == S_OK, "got 0x%08x\n", hr); - ok(len == strlen(test->name), "got %u\n", len); - ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str)); + ok(len == 0, "got %u\n", len); + ok(*str == 0, "got %s\n", wine_dbgstr_w(str)); str = NULL; hr = IXmlReader_GetLocalName(reader, &str, NULL); ok(hr == S_OK, "got 0x%08x\n", hr); - ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str)); - - free_str(str_exp); + ok(*str == 0, "got %s\n", wine_dbgstr_w(str)); len = 1; str = NULL; -- 2.11.4.GIT