diff options
author | Aron Budea <aron.budea@collabora.com> | 2023-08-06 05:08:23 +0200 |
---|---|---|
committer | Aron Budea <aron.budea@collabora.com> | 2023-08-07 17:38:30 +0200 |
commit | c9e863801509fb37b125a8fb07358fb1b235496d (patch) | |
tree | a5fe10a3bb24845735b8293faaaa7cd0c5ee43f4 | |
parent | db9fa6da9d57853e0089a063ec372e11ce6046a9 (diff) |
tdf#150137 fastparser: don't crash on undeclared namespace
Change-Id: Icc8bbb391c7e34754b7274d67d73ff509827a3d0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155381
Tested-by: Aron Budea <aron.budea@collabora.com>
Reviewed-by: Aron Budea <aron.budea@collabora.com>
-rw-r--r-- | basic/qa/basic_coverage/test_tdf150137_parse_fail.bas | 37 | ||||
-rw-r--r-- | sax/source/fastparser/fastparser.cxx | 8 |
2 files changed, 42 insertions, 3 deletions
diff --git a/basic/qa/basic_coverage/test_tdf150137_parse_fail.bas b/basic/qa/basic_coverage/test_tdf150137_parse_fail.bas new file mode 100644 index 000000000000..fdf9f1e9948e --- /dev/null +++ b/basic/qa/basic_coverage/test_tdf150137_parse_fail.bas @@ -0,0 +1,37 @@ +' +' This file is part of the LibreOffice project. +' +' This Source Code Form is subject to the terms of the Mozilla Public +' License, v. 2.0. If a copy of the MPL was not distributed with this +' file, You can obtain one at http://mozilla.org/MPL/2.0/. +' + +Option Explicit + +Function doUnitTest() As String + On Error GoTo ErrorHandler ' Set up error handler + + Dim Xml As String + Dim XmlLen As Long + ' Not namespace-well-formed XML, parse is expected to fail + Xml = "<a:xml/>" + XmlLen = Len(Xml) + Dim XmlByte(1 To XmlLen) As Byte + Dim Index As Integer + For Index = 1 To XmlLen + XmlByte(Index) = Asc(Mid(Xml, Index, 1)) + Next + Dim source As Object + source = CreateUnoStruct("com.sun.star.xml.sax.InputSource") + source.aInputStream = com.sun.star.io.SequenceInputStream.createStreamFromSequence(XmlByte) + Dim parser As Object + parser = CreateUnoService("com.sun.star.xml.sax.FastParser") + ' Parse crashed before the fix + parser.ParseStream(source) + + ' Shouldn't end up here + doUnitTest = "FAIL" + Exit Function +ErrorHandler: + doUnitTest = "OK" +End Function diff --git a/sax/source/fastparser/fastparser.cxx b/sax/source/fastparser/fastparser.cxx index fd1b147f044e..3c67010ad1cb 100644 --- a/sax/source/fastparser/fastparser.cxx +++ b/sax/source/fastparser/fastparser.cxx @@ -1264,12 +1264,14 @@ void FastSaxParserImpl::callbackStartElement(const xmlChar *localName , const xm OUString aElementPrefix; if( prefix != nullptr ) { - if ( !m_bIgnoreMissingNSDecl || URI != nullptr ) + aElementPrefix = OUString( XML_CAST( prefix ), strlen( XML_CAST( prefix )), RTL_TEXTENCODING_UTF8 ); + if ( URI != nullptr ) sNamespace = OUString( XML_CAST( URI ), strlen( XML_CAST( URI )), RTL_TEXTENCODING_UTF8 ); - else + else if ( m_bIgnoreMissingNSDecl ) sNamespace.clear(); + else + throw SAXException("No namespace defined for " + aElementPrefix, {}, {}); nNamespaceToken = GetNamespaceToken( sNamespace ); - aElementPrefix = OUString( XML_CAST( prefix ), strlen( XML_CAST( prefix )), RTL_TEXTENCODING_UTF8 ); } OUString aElementLocalName( XML_CAST( localName ), strlen( XML_CAST( localName )), RTL_TEXTENCODING_UTF8 ); rEvent.msNamespace = sNamespace; |