[2/2] xmllite: Fix equal sign parsing

Nikolay Sivov nsivov at codeweavers.com
Wed Nov 28 05:57:51 CST 2012


Fix equal sign parsing
-------------- next part --------------
>From 938641fb6390a3342dfbf0941c6b33d693e9bd9f Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov at codeweavers.com>
Date: Wed, 28 Nov 2012 09:44:06 -0500
Subject: [PATCH 2/7] Fix equal sign parsing

---
 dlls/xmllite/reader.c |   29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c
index ee6a4d7..11b5eb8 100644
--- a/dlls/xmllite/reader.c
+++ b/dlls/xmllite/reader.c
@@ -48,7 +48,6 @@ static const WCHAR utf8W[] = {'U','T','F','-','8',0};
 
 static const WCHAR dblquoteW[] = {'\"',0};
 static const WCHAR quoteW[] = {'\'',0};
-static const WCHAR eqW[] = {'=',0};
 
 struct xml_encoding_data
 {
@@ -515,6 +514,18 @@ static HRESULT reader_parse_versionnum(xmlreader *reader)
     return S_OK;
 }
 
+/* [25] Eq ::= S? '=' S? */
+static HRESULT reader_parse_eq(xmlreader *reader)
+{
+    static const WCHAR eqW[] = {'=',0};
+    reader_skipspaces(reader);
+    if (reader_cmp(reader, eqW)) return WC_E_EQUAL;
+    /* skip '=' */
+    reader_skipn(reader, 1);
+    reader_skipspaces(reader);
+    return S_OK;
+}
+
 /* [24] VersionInfo ::= S 'version' Eq ("'" VersionNum "'" | '"' VersionNum '"') */
 static HRESULT reader_parse_versioninfo(xmlreader *reader)
 {
@@ -527,9 +538,8 @@ static HRESULT reader_parse_versioninfo(xmlreader *reader)
     /* skip 'version' */
     reader_skipn(reader, 7);
 
-    if (reader_cmp(reader, eqW)) return WC_E_EQUAL;
-    /* skip '=' */
-    reader_skipn(reader, 1);
+    hr = reader_parse_eq(reader);
+    if (FAILED(hr)) return hr;
 
     if (reader_cmp(reader, quoteW) && reader_cmp(reader, dblquoteW))
         return WC_E_QUOTE;
@@ -596,9 +606,8 @@ static HRESULT reader_parse_encdecl(xmlreader *reader)
     /* skip 'encoding' */
     reader_skipn(reader, 8);
 
-    if (reader_cmp(reader, eqW)) return WC_E_EQUAL;
-    /* skip '=' */
-    reader_skipn(reader, 1);
+    hr = reader_parse_eq(reader);
+    if (FAILED(hr)) return hr;
 
     if (reader_cmp(reader, quoteW) && reader_cmp(reader, dblquoteW))
         return WC_E_QUOTE;
@@ -624,6 +633,7 @@ static HRESULT reader_parse_sddecl(xmlreader *reader)
     static const WCHAR yesW[] = {'y','e','s',0};
     static const WCHAR noW[] = {'n','o',0};
     const WCHAR *start, *ptr;
+    HRESULT hr;
 
     if (!reader_skipspaces(reader)) return WC_E_WHITESPACE;
 
@@ -631,9 +641,8 @@ static HRESULT reader_parse_sddecl(xmlreader *reader)
     /* skip 'standalone' */
     reader_skipn(reader, 10);
 
-    if (reader_cmp(reader, eqW)) return WC_E_EQUAL;
-    /* skip '=' */
-    reader_skipn(reader, 1);
+    hr = reader_parse_eq(reader);
+    if (FAILED(hr)) return hr;
 
     if (reader_cmp(reader, quoteW) && reader_cmp(reader, dblquoteW))
         return WC_E_QUOTE;
-- 
1.7.10.4




More information about the wine-patches mailing list