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>
This commit is contained in:
parent
db9fa6da9d
commit
c9e8638015
2 changed files with 44 additions and 5 deletions
37
basic/qa/basic_coverage/test_tdf150137_parse_fail.bas
Normal file
37
basic/qa/basic_coverage/test_tdf150137_parse_fail.bas
Normal file
|
@ -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
|
|
@ -1264,12 +1264,14 @@ void FastSaxParserImpl::callbackStartElement(const xmlChar *localName , const xm
|
|||
OUString aElementPrefix;
|
||||
if( prefix != nullptr )
|
||||
{
|
||||
if ( !m_bIgnoreMissingNSDecl || URI != nullptr )
|
||||
sNamespace = OUString( XML_CAST( URI ), strlen( XML_CAST( URI )), RTL_TEXTENCODING_UTF8 );
|
||||
else
|
||||
sNamespace.clear();
|
||||
nNamespaceToken = GetNamespaceToken( sNamespace );
|
||||
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 if ( m_bIgnoreMissingNSDecl )
|
||||
sNamespace.clear();
|
||||
else
|
||||
throw SAXException("No namespace defined for " + aElementPrefix, {}, {});
|
||||
nNamespaceToken = GetNamespaceToken( sNamespace );
|
||||
}
|
||||
OUString aElementLocalName( XML_CAST( localName ), strlen( XML_CAST( localName )), RTL_TEXTENCODING_UTF8 );
|
||||
rEvent.msNamespace = sNamespace;
|
||||
|
|
Loading…
Reference in a new issue