summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@gmail.com>2013-04-09 16:14:40 -0400
committerKohei Yoshida <kohei.yoshida@gmail.com>2013-04-13 01:54:35 -0400
commit44358ce0b0c2ee5de981fdce66849b3f3ac32390 (patch)
tree606c1bd595df8ff711d8f1471aba07a785da80b5 /sc
parent0552a09b95010d0f622688c2508a0684803a3fa5 (diff)
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
Diffstat (limited to 'sc')
-rw-r--r--sc/source/filter/inc/orcusinterface.hxx31
-rw-r--r--sc/source/filter/orcus/interface.cxx4
2 files changed, 18 insertions, 17 deletions
diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx
index 4bc9b408aa71..0de1fcc29b35 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 25d9b5d21224..5e48208ac2d8 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*/)