Hans Leidekker : webservices: Reject end elements without a parent in the writer.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Jan 21 11:22:06 CST 2016
Module: wine
Branch: master
Commit: 6086ad0fe384cd6744cf5c83f2ad4f336e381845
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6086ad0fe384cd6744cf5c83f2ad4f336e381845
Author: Hans Leidekker <hans at codeweavers.com>
Date: Thu Jan 21 15:27:58 2016 +0100
webservices: Reject end elements without a parent in the writer.
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/webservices/reader.c | 4 ++--
dlls/webservices/webservices_private.h | 2 ++
dlls/webservices/writer.c | 5 ++++-
3 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c
index ae3d62a..13ca50b 100644
--- a/dlls/webservices/reader.c
+++ b/dlls/webservices/reader.c
@@ -1063,8 +1063,8 @@ static BOOL cmp_localname( const unsigned char *name1, ULONG len1, const unsigne
return TRUE;
}
-static struct node *find_parent_element( struct node *node, const WS_XML_STRING *prefix,
- const WS_XML_STRING *localname )
+struct node *find_parent_element( struct node *node, const WS_XML_STRING *prefix,
+ const WS_XML_STRING *localname )
{
struct node *parent;
const WS_XML_STRING *str;
diff --git a/dlls/webservices/webservices_private.h b/dlls/webservices/webservices_private.h
index bae2149..4eeedf5 100644
--- a/dlls/webservices/webservices_private.h
+++ b/dlls/webservices/webservices_private.h
@@ -32,6 +32,8 @@ WS_XML_STRING *alloc_xml_string( const unsigned char *, ULONG ) DECLSPEC_HIDDEN;
WS_XML_UTF8_TEXT *alloc_utf8_text( const unsigned char *, ULONG ) DECLSPEC_HIDDEN;
HRESULT append_attribute( WS_XML_ELEMENT_NODE *, WS_XML_ATTRIBUTE * ) DECLSPEC_HIDDEN;
void free_attribute( WS_XML_ATTRIBUTE * ) DECLSPEC_HIDDEN;
+struct node *find_parent_element( struct node *, const WS_XML_STRING *,
+ const WS_XML_STRING * ) DECLSPEC_HIDDEN;
struct node
{
diff --git a/dlls/webservices/writer.c b/dlls/webservices/writer.c
index 0178978..62e78be 100644
--- a/dlls/webservices/writer.c
+++ b/dlls/webservices/writer.c
@@ -546,10 +546,13 @@ static HRESULT write_startelement( struct writer *writer )
static HRESULT write_endelement( struct writer *writer )
{
- WS_XML_ELEMENT_NODE *elem = (WS_XML_ELEMENT_NODE *)writer->current;
+ struct node *node = find_parent_element( writer->current, NULL, NULL );
+ WS_XML_ELEMENT_NODE *elem = &node->hdr;
ULONG size;
HRESULT hr;
+ if (!elem) return WS_E_INVALID_FORMAT;
+
/* '</prefix:localname>' */
size = elem->localName->length + 3 /* '</>' */;
More information about the wine-cvs
mailing list