Piotr Caban : msxml: Fix implementation of ISAXContentHandler_characters.

Alexandre Julliard julliard at winehq.org
Thu Oct 2 11:37:25 CDT 2008


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

Author: Piotr Caban <piotr.caban at gmail.com>
Date:   Wed Oct  1 19:52:48 2008 +0200

msxml: Fix implementation of ISAXContentHandler_characters.

---

 dlls/msxml3/saxreader.c |   21 ++++++++++++++++++---
 1 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c
index 7d3946a..62058d1 100644
--- a/dlls/msxml3/saxreader.c
+++ b/dlls/msxml3/saxreader.c
@@ -197,6 +197,23 @@ static BSTR QName_from_xmlChar(const xmlChar *prefix, const xmlChar *name)
     return bstr;
 }
 
+BSTR bstr_from_xmlChar_wn(const xmlChar *buf, int len)
+{
+    DWORD size;
+    LPWSTR str;
+    BSTR bstr;
+
+    if(!buf) return NULL;
+
+    size = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)buf, len, NULL, 0);
+    str = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, size*sizeof(WCHAR));
+    if(!str) return NULL;
+    MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)buf, len, str, size);
+    bstr = SysAllocStringLen(str, size);
+    HeapFree(GetProcessHeap(), 0, str);
+    return bstr;
+}
+
 static void format_error_message_from_id(saxlocator *This, HRESULT hr)
 {
     xmlStopParser(This->pParserCtxt);
@@ -1176,8 +1193,6 @@ static void libxmlCharacters(
     chEnd = This->lastCur+len;
     while(*chEnd != '<') chEnd++;
 
-    Chars = bstr_from_xmlChar(ch);
-
     lastCurCopy = This->lastCur;
     columnCopy = This->column;
     lineCopy = This->line;
@@ -1195,7 +1210,7 @@ static void libxmlCharacters(
                 end++;
             }
 
-            Chars = bstr_from_xmlChar(This->lastCur);
+            Chars = bstr_from_xmlChar_wn(This->lastCur, end-This->lastCur+2);
 
             if(*end == '\r' && *(end+1) == '\n')
             {




More information about the wine-cvs mailing list