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