Kaydet (Commit) 7d6f30d0 authored tarafından Eike Rathke's avatar Eike Rathke

Resolves: tdf#93951 set remainder as bad string if not parsed as valid

Change-Id: Ieb9fa5e9cd2d5919a36fbe65ced107eab33c72e2
Reviewed-on: https://gerrit.libreoffice.org/67090Reviewed-by: 's avatarEike Rathke <erack@redhat.com>
Tested-by: Jenkins
üst f1f84cf7
...@@ -2630,6 +2630,7 @@ Label_MaskStateMachine: ...@@ -2630,6 +2630,7 @@ Label_MaskStateMachine:
} }
if ( bi18n ) if ( bi18n )
{ {
const sal_Int32 nOldSrcPos = nSrcPos;
nSrcPos = nSrcPos + nSpaces; nSrcPos = nSrcPos + nSpaces;
OUStringBuffer aSymbol; OUStringBuffer aSymbol;
mnRangeOpPosInSymbol = -1; mnRangeOpPosInSymbol = -1;
...@@ -2649,11 +2650,15 @@ Label_MaskStateMachine: ...@@ -2649,11 +2650,15 @@ Label_MaskStateMachine:
SetError( nErr ); // parsed chars as string SetError( nErr ); // parsed chars as string
} }
if ( aRes.EndPos <= nSrcPos ) if ( aRes.EndPos <= nSrcPos )
{ // ?!? {
// Could not parse anything meaningful.
assert(!aRes.TokenType);
nErr = FormulaError::IllegalChar; nErr = FormulaError::IllegalChar;
SetError( nErr ); SetError( nErr );
nSrcPos = aFormula.getLength(); // Caller has to act on an empty symbol for
aSymbol.truncate(); // nSrcPos < aFormula.getLength()
nSrcPos = nOldSrcPos;
aSymbol.setLength(0);
} }
else else
{ {
...@@ -4117,7 +4122,22 @@ bool ScCompiler::NextNewToken( bool bInArray ) ...@@ -4117,7 +4122,22 @@ bool ScCompiler::NextNewToken( bool bInArray )
sal_Int32 nSpaces = NextSymbol(bInArray); sal_Int32 nSpaces = NextSymbol(bInArray);
if (!cSymbol[0]) if (!cSymbol[0])
{
if (nSrcPos < aFormula.getLength())
{
// Nothing could be parsed, remainder as bad string.
// NextSymbol() must had set an error for this.
assert( pArr->GetCodeError() != FormulaError::NONE);
const OUString aBad( aFormula.copy( nSrcPos));
svl::SharedString aSS = pDoc->GetSharedStringPool().intern( aBad);
maRawToken.SetString( aSS.getData(), aSS.getDataIgnoreCase());
maRawToken.NewOpCode( ocBad);
nSrcPos = aFormula.getLength();
// Add bad string as last token.
return true;
}
return false; return false;
}
if( nSpaces ) if( nSpaces )
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment