Hans Leidekker : webservices: Parse self-closing tags.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Nov 10 10:36:21 CST 2015


Module: wine
Branch: master
Commit: 29b1c115fefa7ee0aee12e583961513b27198759
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=29b1c115fefa7ee0aee12e583961513b27198759

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Tue Nov 10 10:46:38 2015 +0100

webservices: Parse self-closing tags.

Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/webservices/reader.c | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c
index 96a3dc3..0e9d533 100644
--- a/dlls/webservices/reader.c
+++ b/dlls/webservices/reader.c
@@ -379,6 +379,7 @@ enum reader_state
     READER_STATE_INITIAL,
     READER_STATE_BOF,
     READER_STATE_STARTELEMENT,
+    READER_STATE_STARTENDELEMENT,
     READER_STATE_TEXT,
     READER_STATE_ENDELEMENT,
     READER_STATE_COMMENT,
@@ -928,7 +929,7 @@ static HRESULT read_element( struct reader *reader )
     for (;;)
     {
         read_skip_whitespace( reader );
-        if (!read_cmp( reader, ">", 1 )) break;
+        if (!read_cmp( reader, ">", 1 ) || !read_cmp( reader, "/>", 2 )) break;
         if ((hr = read_attribute( reader, &attr )) != S_OK) goto error;
         if ((hr = append_attribute( elem, attr )) != S_OK)
         {
@@ -938,16 +939,24 @@ static HRESULT read_element( struct reader *reader )
     }
 
     read_skip_whitespace( reader );
-    if (read_cmp( reader, ">", 1 ))
+    if (read_cmp( reader, ">", 1 ) && read_cmp( reader, "/>", 2 ))
     {
         hr = WS_E_INVALID_FORMAT;
         goto error;
     }
 
     read_insert_node( reader, reader->current, node );
-    read_skip( reader, 1 );
-    reader->state = READER_STATE_STARTELEMENT;
-
+    if (!read_cmp( reader, "/>", 2 ))
+    {
+        read_skip( reader, 2 );
+        reader->current = reader->current->parent;
+        reader->state   = READER_STATE_STARTENDELEMENT;
+    }
+    else
+    {
+        read_skip( reader, 1 );
+        reader->state = READER_STATE_STARTELEMENT;
+    }
     return S_OK;
 
 error:
@@ -1056,6 +1065,7 @@ static HRESULT read_endelement( struct reader *reader )
     {
     case READER_STATE_TEXT:
     case READER_STATE_STARTELEMENT:
+    case READER_STATE_STARTENDELEMENT:
         break;
     default:
         return WS_E_INVALID_FORMAT;




More information about the wine-cvs mailing list