Module: wine Branch: master Commit: 2a55b8d8e7002c16fca54f5b87a82a73e267b176 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2a55b8d8e7002c16fca54f5b87... Author: Piotr Caban <piotr.caban(a)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') {