[Libreoffice-commits] core.git: Branch 'feature/orcus-update' - sc/source

Kohei Yoshida kohei.yoshida at gmail.com
Tue Apr 9 13:12:52 PDT 2013


 sc/source/filter/inc/orcusinterface.hxx |   31 ++++++++++++++++---------------
 sc/source/filter/orcus/interface.cxx    |    4 ++--
 2 files changed, 18 insertions(+), 17 deletions(-)

New commits:
commit a0fd86f138157693b4b43c5af24009bb777cf422
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Tue Apr 9 16:14:40 2013 -0400

    Try not to crash during import of xlsx and ods documents.
    
    Also, let's not leak memory by returning a new'ed instance from get_styles().
    Orcus never manages the life cycle of objects returned from client code.
    
    Change-Id: Id92eb10dbe88c2a55b5d04e408a01fa9c25fa9a1

diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx
index 4bc9b40..0de1fcc 100644
--- a/sc/source/filter/inc/orcusinterface.hxx
+++ b/sc/source/filter/inc/orcusinterface.hxx
@@ -42,21 +42,6 @@ public:
     const OUString& getByIndex(size_t index) const;
 };
 
-class ScOrcusFactory : public orcus::spreadsheet::iface::import_factory
-{
-    ScDocument& mrDoc;
-    boost::ptr_vector<ScOrcusSheet> maSheets;
-    ScOrcusSharedStrings maSharedStrings;
-
-public:
-    ScOrcusFactory(ScDocument& rDoc);
-
-    virtual orcus::spreadsheet::iface::import_sheet* append_sheet(const char *sheet_name, size_t sheet_name_length);
-    virtual orcus::spreadsheet::iface::import_sheet* get_sheet(const char *sheet_name, size_t sheet_name_length);
-    virtual orcus::spreadsheet::iface::import_shared_strings* get_shared_strings();
-    virtual orcus::spreadsheet::iface::import_styles* get_styles();
-};
-
 class ScOrcusSheet : public orcus::spreadsheet::iface::import_sheet
 {
     ScDocument& mrDoc;
@@ -165,5 +150,21 @@ public:
     virtual size_t commit_cell_style();
 };
 
+class ScOrcusFactory : public orcus::spreadsheet::iface::import_factory
+{
+    ScDocument& mrDoc;
+    boost::ptr_vector<ScOrcusSheet> maSheets;
+    ScOrcusSharedStrings maSharedStrings;
+    ScOrcusStyles maStyles;
+
+public:
+    ScOrcusFactory(ScDocument& rDoc);
+
+    virtual orcus::spreadsheet::iface::import_sheet* append_sheet(const char *sheet_name, size_t sheet_name_length);
+    virtual orcus::spreadsheet::iface::import_sheet* get_sheet(const char *sheet_name, size_t sheet_name_length);
+    virtual orcus::spreadsheet::iface::import_shared_strings* get_shared_strings();
+    virtual orcus::spreadsheet::iface::import_styles* get_styles();
+};
+
 #endif
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx
index 25d9b5d..5e48208 100644
--- a/sc/source/filter/orcus/interface.cxx
+++ b/sc/source/filter/orcus/interface.cxx
@@ -73,7 +73,7 @@ orcus::spreadsheet::iface::import_shared_strings* ScOrcusFactory::get_shared_str
 orcus::spreadsheet::iface::import_styles* ScOrcusFactory::get_styles()
 {
     // We don't support it yet.
-    return new ScOrcusStyles;
+    return &maStyles;
 }
 
 ScOrcusSheet::ScOrcusSheet(ScDocument& rDoc, SCTAB nTab, ScOrcusSharedStrings& rSharedStrings) :
@@ -239,7 +239,7 @@ const OUString& ScOrcusSharedStrings::getByIndex(size_t nIndex) const
     if(nIndex < maSharedStrings.size())
         return maSharedStrings[nIndex];
 
-    throw std::exception();
+    return EMPTY_OUSTRING;
 }
 
 void ScOrcusSharedStrings::set_segment_bold(bool /*b*/)


More information about the Libreoffice-commits mailing list