diff options
author | Michael Stahl <mstahl@redhat.com> | 2017-09-05 22:01:12 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2017-09-05 22:34:59 +0200 |
commit | e530a7ddb1c9423487ce936e6b23b8e36449d555 (patch) | |
tree | e301432948efa67938a8355efc6be99e407b3801 /sax | |
parent | Updated core (diff) | |
download | core-e530a7ddb1c9423487ce936e6b23b8e36449d555.tar.gz core-e530a7ddb1c9423487ce936e6b23b8e36449d555.zip |
tdf#112164 sax: handle errors on last call to XML_Parse()
If XML_Parse() is called with isFinal=1 and there are open tags, that is
an error (XML_ERROR_NO_ELEMENTS) that must be converted to an exception.
This reveals that we already had an incomplete input document, which
needs to be moved to "fail" now.
Change-Id: I7ce3b51bd87923b5edde621508cf38d7ebbc2b14
Diffstat (limited to 'sax')
-rw-r--r-- | sax/source/expatwrap/sax_expat.cxx | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/sax/source/expatwrap/sax_expat.cxx b/sax/source/expatwrap/sax_expat.cxx index 96171eabf947..ef28e8340205 100644 --- a/sax/source/expatwrap/sax_expat.cxx +++ b/sax/source/expatwrap/sax_expat.cxx @@ -647,18 +647,23 @@ void SaxExpatParser_Impl::parse( ) while( nRead ) { nRead = getEntity().converter.readAndConvert( seqOut , nBufSize ); + bool bContinue(false); + if( ! nRead ) { - XML_Parse( getEntity().pParser , + // last call - must return OK + XML_Status const ret = XML_Parse( getEntity().pParser, reinterpret_cast<const char *>(seqOut.getConstArray()), 0 , 1 ); - break; - } - - bool bContinue = ( XML_Parse( getEntity().pParser , + if (ret == XML_STATUS_OK) { + break; + } + } else { + bContinue = ( XML_Parse( getEntity().pParser, reinterpret_cast<const char *>(seqOut.getConstArray()), nRead, 0 ) != XML_STATUS_ERROR ); + } if( ! bContinue || bExceptionWasThrown ) { |