[Libreoffice-commits] core.git: sc/source

Markus Mohrhard markus.mohrhard at googlemail.com
Mon May 27 06:12:57 PDT 2013


 sc/source/filter/dif/difimp.cxx |   39 ++++++++++++++-------------------------
 sc/source/filter/inc/dif.hxx    |    2 +-
 2 files changed, 15 insertions(+), 26 deletions(-)

New commits:
commit 7d01bed2e663e19b2387d5427036afea0ff4fa4f
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Mon May 27 14:59:42 2013 +0200

    we need a reference to the DifParser.aData, fdo#64920
    
    regression from 6191fa0847ac5b27083efe1a8c6cd84d080a638c
    
    Change-Id: If7fc18e7d0bcbf1075a0ecdb1c0dcf3d207f1bda

diff --git a/sc/source/filter/dif/difimp.cxx b/sc/source/filter/dif/difimp.cxx
index 816b221..feab974 100644
--- a/sc/source/filter/dif/difimp.cxx
+++ b/sc/source/filter/dif/difimp.cxx
@@ -61,7 +61,7 @@ FltError ScFormatFilterPluginImpl::ScImportDif( SvStream& rIn, ScDocument* pDoc,
     bool        bSyntErrWarn = false;
     bool        bOverflowWarn = false;
 
-    OUString   aData = aDifParser.aData;
+    OUString&   aData = aDifParser.aData;
     bool        bData = false;
 
     rIn.Seek( 0 );
@@ -377,7 +377,7 @@ TOPIC DifParser::GetNextTopic( void )
                 if( aLine.getLength() > 2 )
                     aData = aLine.copy( 1, aLine.getLength() - 2 );
                 else
-                    aData.Erase();
+                    aData = OUString();
                 eS = S_END;
                 break;
             case S_END:
@@ -400,20 +400,14 @@ TOPIC DifParser::GetNextTopic( void )
 }
 
 
-static void lcl_DeEscapeQuotesDif( String& rString )
+static void lcl_DeEscapeQuotesDif( OUString& rString )
 {
     //  Special handling for DIF import: Escaped (duplicated) quotes are resolved.
     //  Single quote characters are left in place because older versions didn't
     //  escape quotes in strings (and Excel doesn't when using the clipboard).
     //  The quotes around the string are removed before this function is called.
 
-    static const sal_Unicode aDQ[] = { '"', '"', 0 };
-    xub_StrLen nPos = 0;
-    while ( (nPos = rString.Search( aDQ, nPos )) != STRING_NOTFOUND )
-    {
-        rString.Erase( nPos, 1 );
-        ++nPos;
-    }
+    rString = rString.replaceAll("\"\"", "\"");
 }
 
 // Determine if passed in string is numeric data and set fVal/nNumFormat if so
@@ -501,9 +495,9 @@ bool DifParser::LookAhead()
 
 DATASET DifParser::GetNextDataset( void )
 {
-    DATASET             eRet = D_UNKNOWN;
-    OUString       aLine;
-    const sal_Unicode*      pAktBuffer;
+    DATASET eRet = D_UNKNOWN;
+    OUString aLine;
+    const sal_Unicode* pAktBuffer;
 
     ReadNextLine( aLine );
 
@@ -533,15 +527,14 @@ DATASET DifParser::GetNextDataset( void )
                 ReadNextLine( aTmpLine );
                 if ( eRet == D_SYNT_ERROR )
                 {   // for broken records write "#ERR: data" to cell
-                    OUString aTmp = "#ERR: " + OUString( pAktBuffer ) + " (";
-                    OSL_ENSURE( aTmpLine.getLength() <= STRING_MAXLEN - aTmp.getLength() - 1, "GetNextDataset(): line doesn't fit into data");
-                    aTmp += aTmpLine + ")";
-                    aData = aTmp;
+                    OUStringBuffer aTmp("#ERR: ");
+                    aTmp.append(pAktBuffer).append(" (");
+                    aTmp.append(aTmpLine).append(')');
+                    aData = aTmp.makeStringAndClear();
                     eRet = D_STRING;
                 }
                 else
                 {
-                    OSL_ENSURE( aTmpLine.getLength() <= STRING_MAXLEN, "GetNextDataset(): line doesn't fit into data");
                     aData = aTmpLine;
                 }
             }
@@ -563,7 +556,6 @@ DATASET DifParser::GetNextDataset( void )
                         // Single line string
                         if( nLineLength >= 2 && pLine[nLineLength - 1] == '"' )
                         {
-                            OSL_ENSURE( aLine.getLength() - 2 <= STRING_MAXLEN, "GetNextDataset(): line doesn't fit into data");
                             aData = aLine.copy( 1, nLineLength - 2 );
                             lcl_DeEscapeQuotesDif( aData );
                             eRet = D_STRING;
@@ -572,12 +564,11 @@ DATASET DifParser::GetNextDataset( void )
                     else
                     {
                         // Multiline string
-                        OSL_ENSURE( aLine.getLength() - 1 <= STRING_MAXLEN, "GetNextDataset(): line doesn't fit into data");
                         aData = aLine.copy( 1 );
                         bool bContinue = true;
                         while ( bContinue )
                         {
-                            aData.Append( '\n' );
+                            aData = aData + "\n";
                             bContinue = !rIn.IsEof() && ReadNextLine( aLine );
                             if( bContinue )
                             {
@@ -588,13 +579,11 @@ DATASET DifParser::GetNextDataset( void )
                                     bContinue = !LookAhead();
                                     if( bContinue )
                                     {
-                                        OSL_ENSURE( aLine.getLength() <= STRING_MAXLEN - aData.Len(), "GetNextDataset(): line doesn't fit into data");
-                                        aData.Append( aLine );
+                                        aData = aData + aLine;
                                     }
                                     else if( pLine[nLineLength - 1] == '"' )
                                     {
-                                        OSL_ENSURE( nLineLength - 1 <= STRING_MAXLEN - aData.Len(), "GetNextDataset(): line doesn't fit into data");
-                                        aData.Append( pLine, nLineLength - 1 );
+                                        aData = aData + aLine.copy(0, nLineLength -1 );
                                         lcl_DeEscapeQuotesDif( aData );
                                         eRet = D_STRING;
                                     }
diff --git a/sc/source/filter/inc/dif.hxx b/sc/source/filter/inc/dif.hxx
index b9dabff..437c5c7 100644
--- a/sc/source/filter/inc/dif.hxx
+++ b/sc/source/filter/inc/dif.hxx
@@ -62,7 +62,7 @@ class ScPatternAttr;
 class DifParser
 {
 public:
-    String              aData;
+    OUString              aData;
     double              fVal;
     sal_uInt32              nVector;
     sal_uInt32              nVal;


More information about the Libreoffice-commits mailing list