summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2013-05-27 14:59:42 +0200
committerPetr Mladek <pmladek@suse.cz>2013-05-27 14:35:48 +0000
commitbf88119dca0a7c1b1e5e1082c8deada4cdac37c2 (patch)
treef09418a9b77755bb953bde77f4b93d16ce78cb30
parenta0618ace241f51b1946762d7bed63e314d1d7d36 (diff)
we need a reference to the DifParser.aData, fdo#64920
regression from 6191fa0847ac5b27083efe1a8c6cd84d080a638c Change-Id: If7fc18e7d0bcbf1075a0ecdb1c0dcf3d207f1bda Reviewed-on: https://gerrit.libreoffice.org/4054 Reviewed-by: Petr Mladek <pmladek@suse.cz> Tested-by: Petr Mladek <pmladek@suse.cz>
-rw-r--r--sc/source/filter/dif/difimp.cxx36
-rw-r--r--sc/source/filter/inc/dif.hxx2
2 files changed, 12 insertions, 26 deletions
diff --git a/sc/source/filter/dif/difimp.cxx b/sc/source/filter/dif/difimp.cxx
index 448791565c44..dfc68a3f856b 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,
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 @@ 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:
@@ -395,20 +395,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
@@ -528,18 +522,14 @@ DATASET DifParser::GetNextDataset( void )
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 @@ 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;
@@ -570,12 +559,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 )
{
@@ -586,13 +574,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 a8a0a568fd59..da31ae3175c6 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;