diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-02-01 15:36:54 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-02-01 15:39:05 +0000 |
commit | 2525d7cdea8905aa2120ce7b8ed6b8c793045d70 (patch) | |
tree | 02d90c77993d86dd41c75bda771e4524e929afcf | |
parent | 7f4b7db28d4174d1ccf75c1e8373585060e74b1f (diff) |
ofz#3032 slk fuzzing timeouts on filling all rows
which tells us that we're way too slow, which isn't really interesting news,
set an arbitrary limit for number of rows to import
Change-Id: Ie835088eab4e363a7deb19e9e5dbe43c1838520b
-rw-r--r-- | sc/source/ui/docshell/impex.cxx | 27 | ||||
-rw-r--r-- | sc/source/ui/inc/impex.hxx | 1 |
2 files changed, 17 insertions, 11 deletions
diff --git a/sc/source/ui/docshell/impex.cxx b/sc/source/ui/docshell/impex.cxx index c66d4c7e9bf9..56004800a96c 100644 --- a/sc/source/ui/docshell/impex.cxx +++ b/sc/source/ui/docshell/impex.cxx @@ -55,6 +55,7 @@ #include <globstr.hrc> #include <o3tl/safeint.hxx> #include <tools/svlibrary.h> +#include <unotools/configmgr.hxx> #include <vcl/svapp.hxx> #include <memory> @@ -92,7 +93,8 @@ enum class SylkVersion // Whole document without Undo ScImportExport::ScImportExport( ScDocument* p ) : pDocSh( dynamic_cast< ScDocShell* >(p->GetDocumentShell()) ), pDoc( p ), - nSizeLimit( 0 ), cSep( '\t' ), cStr( '"' ), + nSizeLimit( 0 ), nMaxImportRow(!utl::ConfigManager::IsFuzzing() ? MAXROW : SCROWS32K), + cSep( '\t' ), cStr( '"' ), bFormulas( false ), bIncludeFiltered( true ), bAll( true ), bSingle( true ), bUndo( false ), bOverflowRow( false ), bOverflowCol( false ), bOverflowCell( false ), @@ -107,7 +109,8 @@ ScImportExport::ScImportExport( ScDocument* p ) ScImportExport::ScImportExport( ScDocument* p, const ScAddress& rPt ) : pDocSh( dynamic_cast< ScDocShell* >(p->GetDocumentShell()) ), pDoc( p ), aRange( rPt ), - nSizeLimit( 0 ), cSep( '\t' ), cStr( '"' ), + nSizeLimit( 0 ), nMaxImportRow(!utl::ConfigManager::IsFuzzing() ? MAXROW : SCROWS32K), + cSep( '\t' ), cStr( '"' ), bFormulas( false ), bIncludeFiltered( true ), bAll( false ), bSingle( true ), bUndo( pDocSh != nullptr ), bOverflowRow( false ), bOverflowCol( false ), bOverflowCell( false ), @@ -123,7 +126,8 @@ ScImportExport::ScImportExport( ScDocument* p, const ScAddress& rPt ) ScImportExport::ScImportExport( ScDocument* p, const ScRange& r ) : pDocSh( dynamic_cast<ScDocShell* >(p->GetDocumentShell()) ), pDoc( p ), aRange( r ), - nSizeLimit( 0 ), cSep( '\t' ), cStr( '"' ), + nSizeLimit( 0 ), nMaxImportRow(!utl::ConfigManager::IsFuzzing() ? MAXROW : SCROWS32K), + cSep( '\t' ), cStr( '"' ), bFormulas( false ), bIncludeFiltered( true ), bAll( false ), bSingle( false ), bUndo( pDocSh != nullptr ), bOverflowRow( false ), bOverflowCol( false ), bOverflowCell( false ), @@ -140,7 +144,8 @@ ScImportExport::ScImportExport( ScDocument* p, const ScRange& r ) // If a View exists, the TabNo of the view will be used. ScImportExport::ScImportExport( ScDocument* p, const OUString& rPos ) : pDocSh( dynamic_cast< ScDocShell* >(p->GetDocumentShell()) ), pDoc( p ), - nSizeLimit( 0 ), cSep( '\t' ), cStr( '"' ), + nSizeLimit( 0 ), nMaxImportRow(!utl::ConfigManager::IsFuzzing() ? MAXROW : SCROWS32K), + cSep( '\t' ), cStr( '"' ), bFormulas( false ), bIncludeFiltered( true ), bAll( false ), bSingle( true ), bUndo( pDocSh != nullptr ), bOverflowRow( false ), bOverflowCol( false ), bOverflowCell( false ), @@ -1796,10 +1801,10 @@ bool ScImportExport::Sylk2Doc( SvStream& rStrm ) { bInvalidRow = false; bool bFail = o3tl::checked_add(OUString(p).toInt32(), nStartRow - 1, nRow); - if (bFail || nRow < 0 || MAXROW < nRow) + if (bFail || nRow < 0 || nMaxImportRow < nRow) { SAL_WARN("sc.ui","ScImportExport::Sylk2Doc - ;Y invalid nRow=" << nRow); - nRow = std::max<SCROW>(0, std::min<SCROW>(nRow, MAXROW)); + nRow = std::max<SCROW>(0, std::min<SCROW>(nRow, nMaxImportRow)); bInvalidRow = bOverflowRow = true; } break; @@ -1820,10 +1825,10 @@ bool ScImportExport::Sylk2Doc( SvStream& rStrm ) { bInvalidRefRow = false; bool bFail = o3tl::checked_add(OUString(p).toInt32(), nStartRow - 1, nRefRow); - if (bFail || nRefRow < 0 || MAXROW < nRefRow) + if (bFail || nRefRow < 0 || nMaxImportRow < nRefRow) { SAL_WARN("sc.ui","ScImportExport::Sylk2Doc - ;R invalid nRefRow=" << nRefRow); - nRefRow = std::max<SCROW>(0, std::min<SCROW>(nRefRow, MAXROW)); + nRefRow = std::max<SCROW>(0, std::min<SCROW>(nRefRow, nMaxImportRow)); bInvalidRefRow = bOverflowRow = true; } break; @@ -1833,7 +1838,7 @@ bool ScImportExport::Sylk2Doc( SvStream& rStrm ) if( !bSingle && ( nCol < nStartCol || nCol > nEndCol || nRow < nStartRow || nRow > nEndRow - || nCol > MAXCOL || nRow > MAXROW + || nCol > MAXCOL || nRow > nMaxImportRow || bInvalidCol || bInvalidRow ) ) break; if( !bData ) @@ -1957,10 +1962,10 @@ bool ScImportExport::Sylk2Doc( SvStream& rStrm ) { bInvalidRow = false; bool bFail = o3tl::checked_add(OUString(p).toInt32(), nStartRow - 1, nRow); - if (bFail || nRow < 0 || MAXROW < nRow) + if (bFail || nRow < 0 || nMaxImportRow < nRow) { SAL_WARN("sc.ui","ScImportExport::Sylk2Doc - ;Y invalid nRow=" << nRow); - nRow = std::max<SCROW>(0, std::min<SCROW>(nRow, MAXROW)); + nRow = std::max<SCROW>(0, std::min<SCROW>(nRow, nMaxImportRow)); bInvalidRow = bOverflowRow = true; } break; diff --git a/sc/source/ui/inc/impex.hxx b/sc/source/ui/inc/impex.hxx index 29361313471d..a143f067494a 100644 --- a/sc/source/ui/inc/impex.hxx +++ b/sc/source/ui/inc/impex.hxx @@ -54,6 +54,7 @@ class ScImportExport OUString aNonConvertibleChars; OUString maFilterOptions; sal_uLong nSizeLimit; + SCROW nMaxImportRow; sal_Unicode cSep; // Separator sal_Unicode cStr; // String Delimiter bool bFormulas; // Formula in Text? |