[MSXML3]
authorThomas Faber <thomas.faber@reactos.org>
Fri, 14 Sep 2012 17:22:44 +0000 (17:22 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Fri, 14 Sep 2012 17:22:44 +0000 (17:22 +0000)
- Make a copy of the data type information instead of writing to the (read-only) .rsrc section. Already applied upstream.
CORE-6645 #comment Should be fixed. Can you retest with HEAD please?

svn path=/trunk/; revision=57298

reactos/dll/win32/msxml3/schema.c

index 2f31016..b55a535 100644 (file)
@@ -68,7 +68,7 @@ static const xmlChar XDR_schema[] = "Schema";
 static const xmlChar XDR_nsURI[] = "urn:schemas-microsoft-com:xml-data";
 static const xmlChar DT_nsURI[] = "urn:schemas-microsoft-com:datatypes";
 
-static xmlChar const*   datatypes_src;
+static xmlChar *        datatypes_src;
 static int              datatypes_len;
 static HGLOBAL          datatypes_handle;
 static HRSRC            datatypes_rsrc;
@@ -728,7 +728,6 @@ static xmlParserInputPtr external_entity_loader(const char *URL, const char *ID,
 
 void schemasInit(void)
 {
-    int len;
     xmlChar* buf;
     if (!(datatypes_rsrc = FindResourceA(MSXML_hInstance, "DATATYPES", "XML")))
     {
@@ -742,14 +741,14 @@ void schemasInit(void)
         return;
     }
     buf = LockResource(datatypes_handle);
-    len = SizeofResource(MSXML_hInstance, datatypes_rsrc) - 1;
+    datatypes_len = SizeofResource(MSXML_hInstance, datatypes_rsrc) - 1;
 
     /* Resource is loaded as raw data,
      * need a null-terminated string */
-    while (buf[len] != '>')
-        buf[len--] = 0;
-    datatypes_src = buf;
-    datatypes_len = len + 1;
+    while (buf[datatypes_len - 1] != '>') datatypes_len--;
+    datatypes_src = HeapAlloc(GetProcessHeap(), 0, datatypes_len + 1);
+    memcpy(datatypes_src, buf, datatypes_len);
+    datatypes_src[datatypes_len] = 0;
 
     if (xmlGetExternalEntityLoader() != external_entity_loader)
     {
@@ -761,6 +760,7 @@ void schemasInit(void)
 void schemasCleanup(void)
 {
     xmlSchemaFree(datatypes_schema);
+    HeapFree(GetProcessHeap(), 0, datatypes_src);
     xmlSetExternalEntityLoader(_external_entity_loader);
 }