Author: damjan
Date: Mon Oct 22 16:02:13 2012
New Revision: 1400928

URL: http://svn.apache.org/viewvc?rev=1400928&view=rev
Log:
#i117400# CSV: importing 64Kb+ english field entry in utf-8 causes alertless 
crash

Patch by: Eike Rathke
Review by: Damjan Jovanovic


Modified:
    incubator/ooo/trunk/main/editeng/source/editeng/impedit2.cxx

Modified: incubator/ooo/trunk/main/editeng/source/editeng/impedit2.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/editeng/source/editeng/impedit2.cxx?rev=1400928&r1=1400927&r2=1400928&view=diff
==============================================================================
--- incubator/ooo/trunk/main/editeng/source/editeng/impedit2.cxx (original)
+++ incubator/ooo/trunk/main/editeng/source/editeng/impedit2.cxx Mon Oct 22 
16:02:13 2012
@@ -2765,21 +2765,24 @@ EditPaM ImpEditEngine::ImpInsertText( Ed
        // Token mit LINE_SEP abfragen,
        // da der MAC-Compiler aus \n etwas anderes macht!
 
-       sal_uInt16 nStart = 0;
+       // #117400
+       // 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();     // nicht dereferenzieren!
 
                // Start == End => Leerzeile
                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 ); // Dann 
landen die Zeichen im naechsten Absatz.
                                aLine.Erase( nMaxNewChars );            // Del 
Rest...
                        }
@@ -2792,15 +2795,17 @@ EditPaM ImpEditEngine::ImpInsertText( Ed
                                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();    // 
nicht dereferenzieren!
 
                                        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 = ImpInsertFeature( 
EditSelection( aPaM, aPaM ),  );


Reply via email to