[Libreoffice-commits] .: editeng/source
Eike Rathke
erack at kemper.freedesktop.org
Fri Aug 5 17:11:50 PDT 2011
editeng/source/editeng/impedit2.cxx | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
New commits:
commit 651568afad1a585c485384ab6d7b65780fb02256
Author: Eike Rathke <erack at erack.de>
Date: Sat Aug 6 01:39:24 2011 +0200
fdo#39869 Fix memory exhaustion with String length of STRLEN_MAX
diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx
index a7e8c62..689025d 100644
--- a/editeng/source/editeng/impedit2.cxx
+++ b/editeng/source/editeng/impedit2.cxx
@@ -2712,21 +2712,23 @@ EditPaM ImpEditEngine::ImpInsertText( EditSelection aCurSel, const XubString& rS
// Token LINE_SEP query,
// since the MAC-Compiler makes something else from \n !
- sal_uInt16 nStart = 0;
+ // fdo#39869 The loop run variable must be capable to hold STRLEN_MAX+1,
+ // that with STRING32 would be SAL_MAX_INT32+1 but with 16-bit is 0xFFFF+1
+ sal_uInt32 nStart = 0;
while ( nStart < aText.Len() )
{
- sal_uInt16 nEnd = aText.Search( LINE_SEP, nStart );
+ sal_uInt32 nEnd = aText.Search( LINE_SEP, static_cast<xub_StrLen>(nStart) );
if ( nEnd == STRING_NOTFOUND )
nEnd = aText.Len(); // not dereference!
// Start == End => empty line
if ( nEnd > nStart )
{
- XubString aLine( aText, nStart, nEnd-nStart );
+ XubString aLine( aText, nStart, static_cast<xub_StrLen>(nEnd-nStart) );
xub_StrLen nChars = aPaM.GetNode()->Len() + aLine.Len();
if ( nChars > MAXCHARSINPARA )
{
- sal_uInt16 nMaxNewChars = MAXCHARSINPARA-aPaM.GetNode()->Len();
+ xub_StrLen nMaxNewChars = MAXCHARSINPARA-aPaM.GetNode()->Len();
nEnd -= ( aLine.Len() - nMaxNewChars ); // Then the characters end up in the next paragraph.
aLine.Erase( nMaxNewChars ); // Delete the Rest...
}
@@ -2737,15 +2739,17 @@ EditPaM ImpEditEngine::ImpInsertText( EditSelection aCurSel, const XubString& rS
aPaM = aEditDoc.InsertText( aPaM, aLine );
else
{
- sal_uInt16 nStart2 = 0;
+ sal_uInt32 nStart2 = 0;
while ( nStart2 < aLine.Len() )
{
- sal_uInt16 nEnd2 = aLine.Search( '\t', nStart2 );
+ sal_uInt32 nEnd2 = aLine.Search( '\t', static_cast<xub_StrLen>(nStart2) );
if ( nEnd2 == STRING_NOTFOUND )
nEnd2 = aLine.Len(); // not dereference!
if ( nEnd2 > nStart2 )
- aPaM = aEditDoc.InsertText( aPaM, XubString( aLine, nStart2, nEnd2-nStart2 ) );
+ aPaM = aEditDoc.InsertText( aPaM, XubString( aLine,
+ static_cast<xub_StrLen>(nStart2),
+ static_cast<xub_StrLen>(nEnd2-nStart2) ) );
if ( nEnd2 < aLine.Len() )
{
aPaM = aEditDoc.InsertFeature( aPaM, aTabItem );
More information about the Libreoffice-commits
mailing list