[3/4] webservices: Reset the read position if an opening bracket is not followed by a valid name character.

Hans Leidekker hans at codeweavers.com
Wed Apr 6 07:09:34 CDT 2016


Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
 dlls/webservices/reader.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c
index d79c310..7a30362 100644
--- a/dlls/webservices/reader.c
+++ b/dlls/webservices/reader.c
@@ -922,6 +922,15 @@ static inline void read_skip( struct reader *reader, unsigned int count )
     }
 }
 
+static inline void read_rewind( struct reader *reader, unsigned int count )
+{
+    while (reader->read_pos && count)
+    {
+        reader->read_pos--;
+        count--;
+    }
+}
+
 static inline BOOL read_isnamechar( unsigned int ch )
 {
     /* FIXME: incomplete */
@@ -1182,6 +1191,11 @@ static HRESULT read_element( struct reader *reader )
 
     if (read_cmp( reader, "<", 1 )) goto error;
     read_skip( reader, 1 );
+    if (!read_isnamechar( read_utf8_char( reader, &skip )))
+    {
+        read_rewind( reader, 1 );
+        goto error;
+    }
 
     start = read_current_ptr( reader );
     for (;;)
-- 
2.8.0.rc3




More information about the wine-patches mailing list