[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