summaryrefslogtreecommitdiff
path: root/sax
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2017-09-05 22:01:12 +0200
committerAndras Timar <andras.timar@collabora.com>2017-09-08 11:38:34 +0200
commit39f0742222b203726c2d314877729de1f9d4d938 (patch)
tree1c7a85d2d7328e4e6946560621b3a4e8cbad58e0 /sax
parent2df9df2b616467672d85b9374b31a8547da3ef1a (diff)
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. (cherry picked from commit e530a7ddb1c9423487ce936e6b23b8e36449d555) tdf#112164 add test document (cherry picked from commit aad2cdce2a2e89f35366c55878129d268cc92bef) Change-Id: I7ce3b51bd87923b5edde621508cf38d7ebbc2b14 Reviewed-on: https://gerrit.libreoffice.org/41965 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com> (cherry picked from commit 3604ca211204b9a0971a65c96a5075ba43f15693)
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 ba87c6f9e146..dfe2246eec19 100644
--- a/sax/source/expatwrap/sax_expat.cxx
+++ b/sax/source/expatwrap/sax_expat.cxx
@@ -670,18 +670,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 || this->bExceptionWasThrown ) {