summaryrefslogtreecommitdiffstats
path: root/sax
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2017-09-05 22:01:12 +0200
committerMichael Stahl <mstahl@redhat.com>2017-09-05 22:34:59 +0200
commite530a7ddb1c9423487ce936e6b23b8e36449d555 (patch)
treee301432948efa67938a8355efc6be99e407b3801 /sax
parentUpdated core (diff)
downloadcore-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.cxx15
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 ) {