[Libreoffice-commits] core.git: sc/source
Eike Rathke (via logerrit)
logerrit at kemper.freedesktop.org
Fri Sep 11 20:06:40 UTC 2020
sc/source/ui/docshell/impex.cxx | 27 ++++++++++++++-------------
1 file changed, 14 insertions(+), 13 deletions(-)
New commits:
commit 2cb743eea3396541e155c24773b54de0663c7475
Author: Eike Rathke <erack at redhat.com>
AuthorDate: Fri Sep 11 20:24:22 2020 +0200
Commit: Eike Rathke <erack at redhat.com>
CommitDate: Fri Sep 11 22:05:55 2020 +0200
Make arbitrary cell length limit in CSV import a constexpr
... so we could up that in one place if we really wanted.
Usually exceeding that length is due to malformed data opening a
quoted field without closing it. However, there might be valid
reasons to allow more than 64k characters in one cell, but think
about a *reasonable* limit, not 2GB ...
Change-Id: I7f9ea80ab2f7a4eb34d93203286c973ea03f1ce0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102495
Reviewed-by: Eike Rathke <erack at redhat.com>
Tested-by: Jenkins
diff --git a/sc/source/ui/docshell/impex.cxx b/sc/source/ui/docshell/impex.cxx
index 98b65f929346..fbd30d4234d0 100644
--- a/sc/source/ui/docshell/impex.cxx
+++ b/sc/source/ui/docshell/impex.cxx
@@ -66,10 +66,11 @@
// We don't want to end up with 2GB read in one line just because of malformed
// multiline fields, so chop it _somewhere_, which is twice supported columns
-// times maximum cell content length, 2*1024*64K=128M, and because it's
-// sal_Unicode that's 256MB. If it's 2GB of data without LF we're out of luck
-// anyway.
-const sal_Int32 nArbitraryLineLengthLimit = 2 * MAXCOLCOUNT * 65536;
+// times arbitrary maximum cell content length, 2*1024*64K=128M, and because
+// it's sal_Unicode that's 256MB. If it's 2GB of data without LF we're out of
+// luck anyway.
+constexpr sal_Int32 nArbitraryCellLengthLimit = SAL_MAX_UINT16;
+constexpr sal_Int32 nArbitraryLineLengthLimit = 2 * MAXCOLCOUNT * nArbitraryCellLengthLimit;
namespace
{
@@ -632,15 +633,15 @@ static QuoteType lcl_isEscapedOrFieldEndQuote( sal_Int32 nQuotes, const sal_Unic
*/
static bool lcl_appendLineData( OUString& rField, const sal_Unicode* p1, const sal_Unicode* p2 )
{
- OSL_ENSURE( rField.getLength() + (p2 - p1) <= SAL_MAX_UINT16, "lcl_appendLineData: data overflow");
- if (rField.getLength() + (p2 - p1) <= SAL_MAX_UINT16)
+ if (rField.getLength() + (p2 - p1) <= nArbitraryCellLengthLimit)
{
rField += OUString( p1, sal::static_int_cast<sal_Int32>( p2 - p1 ) );
return true;
}
else
{
- rField += OUString( p1, SAL_MAX_UINT16 - rField.getLength() );
+ SAL_WARN( "sc", "lcl_appendLineData: data overflow");
+ rField += OUString( p1, nArbitraryCellLengthLimit - rField.getLength() );
return false;
}
}
@@ -1274,26 +1275,26 @@ static OUString lcl_GetFixed( const OUString& rLine, sal_Int32 nStart, sal_Int32
rbIsQuoted = (pStr[nStart] == '"' && pStr[nSpace-1] == '"');
if (rbIsQuoted)
{
- bool bFits = (nSpace - nStart - 3 <= SAL_MAX_UINT16);
- OSL_ENSURE( bFits, "lcl_GetFixed: line doesn't fit into data");
+ bool bFits = (nSpace - nStart - 3 <= nArbitraryCellLengthLimit);
if (bFits)
return rLine.copy(nStart+1, std::max< sal_Int32 >(0, nSpace-nStart-2));
else
{
+ SAL_WARN( "sc", "lcl_GetFixed: line doesn't fit into data");
rbOverflowCell = true;
- return rLine.copy(nStart+1, SAL_MAX_UINT16);
+ return rLine.copy(nStart+1, nArbitraryCellLengthLimit);
}
}
else
{
- bool bFits = (nSpace - nStart <= SAL_MAX_UINT16);
- OSL_ENSURE( bFits, "lcl_GetFixed: line doesn't fit into data");
+ bool bFits = (nSpace - nStart <= nArbitraryCellLengthLimit);
if (bFits)
return rLine.copy(nStart, nSpace-nStart);
else
{
+ SAL_WARN( "sc", "lcl_GetFixed: line doesn't fit into data");
rbOverflowCell = true;
- return rLine.copy(nStart, SAL_MAX_UINT16);
+ return rLine.copy(nStart, nArbitraryCellLengthLimit);
}
}
}
More information about the Libreoffice-commits
mailing list