Module: wine Branch: master Commit: 6927a11eabe50c911d4d7ac943fda5c797be555d URL: http://source.winehq.org/git/wine.git/?a=commit;h=6927a11eabe50c911d4d7ac943...
Author: Piotr Caban piotr@codeweavers.com Date: Mon Oct 24 12:55:13 2011 +0200
msxml3: Prefer to report msxml error over libxml parsing error.
---
dlls/msxml3/saxreader.c | 16 ++++++++++------ 1 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c index fe78375..45f7e909 100644 --- a/dlls/msxml3/saxreader.c +++ b/dlls/msxml3/saxreader.c @@ -1458,8 +1458,10 @@ static void libxmlFatalError(void *ctx, const char *msg, ...) DWORD len; va_list args;
- if(This->ret != S_OK) + if(This->ret != S_OK) { + xmlStopParser(This->pParserCtxt); return; + }
va_start(args, msg); vsprintf(message, msg, args); @@ -1966,8 +1968,10 @@ static HRESULT internal_parseBuffer(saxreader *This, const char *buffer, int siz locator->pParserCtxt->userData = locator;
This->isParsing = TRUE; - if(xmlParseDocument(locator->pParserCtxt) == -1) hr = E_FAIL; - else hr = locator->ret; + if(xmlParseDocument(locator->pParserCtxt)==-1 && locator->ret==S_OK) + hr = E_FAIL; + else + hr = locator->ret; This->isParsing = FALSE;
if(locator->pParserCtxt) @@ -2010,7 +2014,7 @@ static HRESULT internal_parseStream(saxreader *This, IStream *stream, BOOL vbInt if(dataRead != sizeof(data)) { ret = xmlParseChunk(locator->pParserCtxt, data, 0, 1); - hr = ret != XML_ERR_OK ? E_FAIL : locator->ret; + hr = ret!=XML_ERR_OK && locator->ret==S_OK ? E_FAIL : locator->ret; } else { @@ -2021,14 +2025,14 @@ static HRESULT internal_parseStream(saxreader *This, IStream *stream, BOOL vbInt if (FAILED(hr)) break;
ret = xmlParseChunk(locator->pParserCtxt, data, dataRead, 0); - hr = ret != XML_ERR_OK ? E_FAIL : locator->ret; + hr = ret!=XML_ERR_OK && locator->ret==S_OK ? E_FAIL : locator->ret;
if (hr != S_OK) break;
if (dataRead != sizeof(data)) { ret = xmlParseChunk(locator->pParserCtxt, data, 0, 1); - hr = ret != XML_ERR_OK ? E_FAIL : locator->ret; + hr = ret!=XML_ERR_OK && locator->ret==S_OK ? E_FAIL : locator->ret; break; } }