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