Nikolay Sivov : ntdll: Fix manifest attribute parsing.

Alexandre Julliard julliard at winehq.org
Wed Jan 1 14:24:21 CST 2014


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed Jan  1 22:00:40 2014 +0400

ntdll: Fix manifest attribute parsing.

---

 dlls/kernel32/tests/actctx.c |   12 ++++++++++++
 dlls/ntdll/actctx.c          |   12 +++++++++++-
 2 files changed, 23 insertions(+), 1 deletions(-)

diff --git a/dlls/kernel32/tests/actctx.c b/dlls/kernel32/tests/actctx.c
index ab655c0..5795e18 100644
--- a/dlls/kernel32/tests/actctx.c
+++ b/dlls/kernel32/tests/actctx.c
@@ -74,6 +74,11 @@ static const char manifest1[] =
 "<assemblyIdentity version=\"1.0.0.0\"  name=\"Wine.Test\" type=\"win32\"></assemblyIdentity>"
 "</assembly>";
 
+static const char manifest1_1[] =
+"<assembly xmlns = \"urn:schemas-microsoft-com:asm.v1\" manifestVersion = \"1.0\">"
+"<assemblyIdentity version = \"1.0.0.0\" name = \"Wine.Test\" type = \"win32\"></assemblyIdentity>"
+"</assembly>";
+
 static const char manifest2[] =
 "<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">"
 "<assemblyIdentity version=\"1.2.3.4\" name=\"Wine.Test\" type=\"win32\">"
@@ -1748,6 +1753,13 @@ static void test_actctx(void)
         pReleaseActCtx(handle);
     }
 
+    /* test for whitespace handling in Eq ::= S? '=' S? */
+    create_manifest_file("test1_1.manifest", manifest1_1, -1, NULL, NULL);
+    handle = test_create("test1_1.manifest");
+    ok(handle != INVALID_HANDLE_VALUE, "got %p\n", handle);
+    DeleteFileA("test1_1.manifest");
+    pReleaseActCtx(handle);
+
     if(!create_manifest_file("test1.manifest", manifest1, -1, NULL, NULL)) {
         skip("Could not create manifest file\n");
         return;
diff --git a/dlls/ntdll/actctx.c b/dlls/ntdll/actctx.c
index 962a4e5..bdbb330 100644
--- a/dlls/ntdll/actctx.c
+++ b/dlls/ntdll/actctx.c
@@ -1125,13 +1125,23 @@ static BOOL next_xml_attr(xmlbuf_t* xmlbuf, xmlstr_t* name, xmlstr_t* value,
     ptr = xmlbuf->ptr;
     while (ptr < xmlbuf->end && *ptr != '=' && *ptr != '>' && !isxmlspace(*ptr)) ptr++;
 
-    if (ptr == xmlbuf->end || *ptr != '=') return FALSE;
+    if (ptr == xmlbuf->end) return FALSE;
 
     name->ptr = xmlbuf->ptr;
     name->len = ptr-xmlbuf->ptr;
     xmlbuf->ptr = ptr;
 
+    /* skip spaces before '=' */
+    while (ptr < xmlbuf->end && *ptr != '=' && isxmlspace(*ptr)) ptr++;
+    if (ptr == xmlbuf->end || *ptr != '=') return FALSE;
+
+    /* skip '=' itself */
     ptr++;
+    if (ptr == xmlbuf->end) return FALSE;
+
+    /* skip spaces after '=' */
+    while (ptr < xmlbuf->end && *ptr != '"' && *ptr != '\'' && isxmlspace(*ptr)) ptr++;
+
     if (ptr == xmlbuf->end || (*ptr != '"' && *ptr != '\'')) return FALSE;
 
     value->ptr = ++ptr;




More information about the wine-cvs mailing list