Jacek Caban : xmllite: Allocate value in reader_add_attr.
Alexandre Julliard
julliard at winehq.org
Fri Mar 31 14:26:29 CDT 2017
Module: wine
Branch: master
Commit: 1b9b791c4118bdebf08990d94b196ce7877acf95
URL: http://source.winehq.org/git/wine.git/?a=commit;h=1b9b791c4118bdebf08990d94b196ce7877acf95
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Mar 31 15:58:21 2017 +0200
xmllite: Allocate value in reader_add_attr.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/xmllite/reader.c | 10 ++++++++--
dlls/xmllite/tests/reader.c | 4 +++-
2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c
index a11ec7a..e7b8364 100644
--- a/dlls/xmllite/reader.c
+++ b/dlls/xmllite/reader.c
@@ -409,6 +409,7 @@ static void reader_clear_attrs(xmlreader *reader)
LIST_FOR_EACH_ENTRY_SAFE(attr, attr2, &reader->attrs, struct attribute, entry)
{
reader_free_strvalued(reader, &attr->localname);
+ reader_free_strvalued(reader, &attr->value);
reader_free(reader, attr);
}
list_init(&reader->attrs);
@@ -428,6 +429,12 @@ static HRESULT reader_add_attr(xmlreader *reader, strval *prefix, strval *localn
if (!attr) return E_OUTOFMEMORY;
hr = reader_strvaldup(reader, localname, &attr->localname);
+ if (hr == S_OK)
+ {
+ hr = reader_strvaldup(reader, value, &attr->value);
+ if (hr != S_OK)
+ reader_free_strvalued(reader, &attr->value);
+ }
if (hr != S_OK)
{
reader_free(reader, attr);
@@ -439,7 +446,6 @@ static HRESULT reader_add_attr(xmlreader *reader, strval *prefix, strval *localn
else
memset(&attr->prefix, 0, sizeof(attr->prefix));
attr->qname = qname ? *qname : *localname;
- attr->value = *value;
attr->position = *position;
attr->flags = flags;
list_add_tail(&reader->attrs, &attr->entry);
@@ -3303,7 +3309,7 @@ static const strval *reader_get_value(xmlreader *reader, BOOL ensure_allocated)
return &ns->uri;
}
- break;
+ return &reader->attr->value;
default:
break;
}
diff --git a/dlls/xmllite/tests/reader.c b/dlls/xmllite/tests/reader.c
index fd83569..ea163de 100644
--- a/dlls/xmllite/tests/reader.c
+++ b/dlls/xmllite/tests/reader.c
@@ -2483,7 +2483,7 @@ static void test_reader_position(void)
static void test_string_pointers(void)
{
- const WCHAR *ns, *nsq, *empty, *xmlns_ns, *xmlns_name, *name, *p, *q, *xml, *ptr;
+ const WCHAR *ns, *nsq, *empty, *xmlns_ns, *xmlns_name, *name, *p, *q, *xml, *ptr, *value;
IXmlReader *reader;
HRESULT hr;
@@ -2592,10 +2592,12 @@ static void test_string_pointers(void)
read_node(reader, XmlNodeType_Element);
next_attribute(reader);
name = reader_name(reader, "attr");
+ value = reader_value(reader, "value");
move_to_element(reader);
next_attribute(reader);
ok(name == reader_name(reader, "attr"), "attr pointer changed\n");
+ ok(value == reader_value(reader, "value"), "value pointer changed\n");
IXmlReader_Release(reader);
}
More information about the wine-cvs
mailing list