basic/qa/basic_coverage/test_tdf150137_parse_fail.bas |   37 ++++++++++++++++++
 sax/source/fastparser/fastparser.cxx                  |    8 ++-
 2 files changed, 42 insertions(+), 3 deletions(-)

New commits:
commit 8e00558e6a569995905e1d18643605c6e4946391
Author:     Aron Budea <aron.bu...@collabora.com>
AuthorDate: Sun Aug 6 05:08:23 2023 +0200
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Tue Aug 8 20:30:38 2023 +0200

    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.bu...@collabora.com>
    Reviewed-by: Aron Budea <aron.bu...@collabora.com>
    (cherry picked from commit c9e863801509fb37b125a8fb07358fb1b235496d)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155402
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    Tested-by: Jenkins

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 344dda9cd63e..93e661313bd3 100644
--- a/sax/source/fastparser/fastparser.cxx
+++ b/sax/source/fastparser/fastparser.cxx
@@ -1265,12 +1265,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;

Reply via email to