Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/4054

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/54/4054/1

we need a reference to the DifParser.aData, fdo#64920

regression from 6191fa0847ac5b27083efe1a8c6cd84d080a638c

Change-Id: If7fc18e7d0bcbf1075a0ecdb1c0dcf3d207f1bda
---
M sc/source/filter/dif/difimp.cxx
M sc/source/filter/inc/dif.hxx
2 files changed, 12 insertions(+), 26 deletions(-)



diff --git a/sc/source/filter/dif/difimp.cxx b/sc/source/filter/dif/difimp.cxx
index 4487915..dfc68a3 100644
--- a/sc/source/filter/dif/difimp.cxx
+++ b/sc/source/filter/dif/difimp.cxx
@@ -61,7 +61,7 @@
     sal_Bool        bSyntErrWarn = false;
     sal_Bool        bOverflowWarn = false;
 
-    rtl::OUString   aData = aDifParser.aData;
+    rtl::OUString&   aData = aDifParser.aData;
     sal_Bool        bData = false;
 
     rIn.Seek( 0 );
@@ -372,7 +372,7 @@
                 if( aLine.getLength() > 2 )
                     aData = aLine.copy( 1, aLine.getLength() - 2 );
                 else
-                    aData.Erase();
+                    aData = OUString();
                 eS = S_END;
                 break;
             case S_END:
@@ -395,20 +395,14 @@
 }
 
 
-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
@@ -528,18 +522,14 @@
                 ReadNextLine( aTmpLine );
                 if ( eRet == D_SYNT_ERROR )
                 {   // for broken records write "#ERR: data" to cell
-                    String aTmp( RTL_CONSTASCII_USTRINGPARAM( "#ERR: " ));
-                    aTmp += pAktBuffer;
-                    aTmp.AppendAscii( " (" );
-                    OSL_ENSURE( aTmpLine.getLength() <= STRING_MAXLEN - aTmp.Len() - 1, 
"GetNextDataset(): line doesn't fit into data");
-                    aTmp += aTmpLine;
-                    aTmp += sal_Unicode(')');
-                    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;
                 }
             }
@@ -561,7 +551,6 @@
                         // 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;
@@ -570,12 +559,11 @@
                     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 )
                             {
@@ -586,13 +574,11 @@
                                     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 a8a0a56..da31ae3 100644
--- a/sc/source/filter/inc/dif.hxx
+++ b/sc/source/filter/inc/dif.hxx
@@ -62,7 +62,7 @@
 class DifParser
 {
 public:
-    String              aData;
+    OUString              aData;
     double              fVal;
     sal_uInt32              nVector;
     sal_uInt32              nVal;

-- 
To view, visit https://gerrit.libreoffice.org/4054
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If7fc18e7d0bcbf1075a0ecdb1c0dcf3d207f1bda
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0
Gerrit-Owner: Markus Mohrhard <markus.mohrhard@googlemail.com>


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.