Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


Hi Kohei,
Sorry for double posting, forgot to CC the list.

On Wed, Apr 18, 2012 at 02:21, Kohei Yoshida <kohei.yoshida@gmail.com> wrote:
On Wed, 2012-04-18 at 00:41 +0200, Albert Thuswaldner wrote:
Hi Kohei,
This patch makes the bounds checking of the initial tab count more
consistent with the actual limits.

Actually we intentionally limit the number of initial sheets to 1024
even though the document can have up to 10000 sheets.

This is to prevent users to accidentally set the initial sheets too
high, since that could cause the memory usage of even a blank document
to exceed the available system memory, and it becomes very difficult to
revert the setting once it's set.

Ok, good to know. IMHO it is even more important to sort this thing
out. I've updated my patch with a new proposed solution.
/Albert
From 9565e78318123cffdd244c65081d3ff54373d411 Mon Sep 17 00:00:00 2001
From: Albert Thuswaldner <albert.thuswaldner@gmail.com>
Date: Wed, 18 Apr 2012 00:31:02 +0200
Subject: [PATCH] Use global constants for initial tab count bounds checking

---
 sc/inc/address.hxx                  |    6 +++++-
 sc/source/ui/optdlg/tpdefaults.cxx  |   11 ++++-------
 sc/source/ui/vba/vbaapplication.cxx |    5 +++--
 3 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/sc/inc/address.hxx b/sc/inc/address.hxx
index 6c45311..8d209c9 100644
--- a/sc/inc/address.hxx
+++ b/sc/inc/address.hxx
@@ -95,7 +95,11 @@ const SCROW       MAXROW         = MAXROWCOUNT - 1;
 const SCCOL       MAXCOL         = MAXCOLCOUNT - 1;
 const SCTAB       MAXTAB         = MAXTABCOUNT - 1;
 const SCCOLROW    MAXCOLROW      = MAXROW;
-
+// Limit the initial tab count to prevent users to set the count too high,
+// which could cause the memory usage of blank documents to exceed the
+// available system memory.
+const SCTAB       MAXINITTABCOUNT = 1024;
+const SCTAB       MININITTABCOUNT = 1;
 
 // Special values
 const SCTAB SC_TAB_APPEND     = SCTAB_MAX;
diff --git a/sc/source/ui/optdlg/tpdefaults.cxx b/sc/source/ui/optdlg/tpdefaults.cxx
index bc5b988..36ff088 100644
--- a/sc/source/ui/optdlg/tpdefaults.cxx
+++ b/sc/source/ui/optdlg/tpdefaults.cxx
@@ -36,9 +36,6 @@
 #include "defaultsoptions.hxx"
 #include "document.hxx"
 
-#define INIT_SHEETS_MIN 1
-#define INIT_SHEETS_MAX 1024
-
 using ::rtl::OUString;
 
 ScTpDefaultsOptions::ScTpDefaultsOptions(Window *pParent, const SfxItemSet &rCoreSet) :
@@ -119,10 +116,10 @@ int ScTpDefaultsOptions::DeactivatePage(SfxItemSet* /*pSet*/)
 void ScTpDefaultsOptions::CheckNumSheets()
 {
     sal_Int64 nVal = aEdNSheets.GetValue();
-    if (nVal > INIT_SHEETS_MAX)
-        aEdNSheets.SetValue(INIT_SHEETS_MAX);
-    if (nVal < INIT_SHEETS_MIN)
-        aEdNSheets.SetValue(INIT_SHEETS_MIN);
+    if (nVal > MAXINITTABCOUNT)
+        aEdNSheets.SetValue(MAXINITTABCOUNT);
+    if (nVal < MININITTABCOUNT)
+        aEdNSheets.SetValue(MININITTABCOUNT);
 }
 
 void ScTpDefaultsOptions::CheckPrefix(Edit* pEdit)
diff --git a/sc/source/ui/vba/vbaapplication.cxx b/sc/source/ui/vba/vbaapplication.cxx
index 478e8f4..ae4b232 100644
--- a/sc/source/ui/vba/vbaapplication.cxx
+++ b/sc/source/ui/vba/vbaapplication.cxx
@@ -945,9 +945,10 @@ sal_Int32 SAL_CALL ScVbaApplication::getSheetsInNewWorkbook() throw 
(uno::Runtim
 
 void SAL_CALL ScVbaApplication::setSheetsInNewWorkbook( sal_Int32 SheetsInNewWorkbook ) throw 
(script::BasicErrorException, uno::RuntimeException)
 {
-    if ( SheetsInNewWorkbook < 1 || SheetsInNewWorkbook > MAXTAB )
+    if ( SheetsInNewWorkbook < MININITTABCOUNT
+      || SheetsInNewWorkbook > MAXINITTABCOUNT )
     {
-        DebugHelper::exception( OUString(RTL_CONSTASCII_USTRINGPARAM("The number must be between 1 
and 255")),
+        DebugHelper::exception( OUString(RTL_CONSTASCII_USTRINGPARAM("The number must be between 1 
and 10000")),
             uno::Exception(), SbERR_METHOD_FAILED, OUString() );
     }
     else
-- 
1.7.3.4


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.