diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2013-05-27 14:59:42 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2013-05-27 15:09:48 +0200 |
commit | 7d01bed2e663e19b2387d5427036afea0ff4fa4f (patch) | |
tree | 51386493a1580c263b9ada3df2ce34fb38c3b25e /sc | |
parent | 376830eb55eedf2ca31b431dd27ea9ce0df9b2f8 (diff) |
we need a reference to the DifParser.aData, fdo#64920
regression from 6191fa0847ac5b27083efe1a8c6cd84d080a638c
Change-Id: If7fc18e7d0bcbf1075a0ecdb1c0dcf3d207f1bda
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/filter/dif/difimp.cxx | 39 | ||||
-rw-r--r-- | sc/source/filter/inc/dif.hxx | 2 |
2 files changed, 15 insertions, 26 deletions
diff --git a/sc/source/filter/dif/difimp.cxx b/sc/source/filter/dif/difimp.cxx index 816b2216ba15..feab9741c1b4 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 b9dabff235ed..437c5c754bb6 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; |