diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2013-05-27 14:59:42 +0200 |
---|---|---|
committer | Petr Mladek <pmladek@suse.cz> | 2013-05-31 13:44:47 +0200 |
commit | ce072713b0cb77ba7c4b2d6c9be05f91bee06b26 (patch) | |
tree | 8641375fb85cb9693cb975deb9f854eac8717d80 | |
parent | b06db10a0e02212cc41f9db105f5fa900e305144 (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.cxx | 36 | ||||
-rw-r--r-- | sc/source/filter/inc/dif.hxx | 2 |
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; |