sc/source/filter/xml/xmlcelli.cxx | 21 +++++++++++++++++---- sc/source/filter/xml/xmlcoli.cxx | 3 ++- sc/source/filter/xml/xmlrowi.cxx | 8 ++++++++ sc/source/filter/xml/xmlrowi.hxx | 2 ++ 4 files changed, 29 insertions(+), 5 deletions(-)
New commits: commit cf019c9a7baceec3b4dc849d7cba8923c6d2a425 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Fri Jan 4 03:28:32 2013 +0100 OSL_ENSURE -> SAL_WARN_IF in xmlcelli.cxx Change-Id: Ia60e07dca17cbc728385c411f67bd3d9041b15ee diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx index fac1191..58919b0 100644 --- a/sc/source/filter/xml/xmlcelli.cxx +++ b/sc/source/filter/xml/xmlcelli.cxx @@ -1064,7 +1064,7 @@ void ScXMLTableRowCellContext::AddFormulaCell( const ScAddress& rCellPos ) if( cellExists(rCellPos) ) { SetContentValidation( rCellPos ); - OSL_ENSURE(((nColsRepeated == 1) && (nRepeatedRows == 1)), "repeated cells with formula not possible now"); + SAL_WARN_IF((nColsRepeated != 1) || (nRepeatedRows != 1), "sc", "repeated cells with formula not possible now"); rXMLImport.GetStylesImportHelper()->AddCell(rCellPos); //add matrix commit 94f7417b038fad6f2a92d1c7c5f8f00c3e64711b Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Fri Jan 4 03:27:01 2013 +0100 don't overflow SCCOL during repeated cell import, fdo#58539 This is the fix for the third and last crash with gnome#627150 Change-Id: Iaf8611500fdb485017814b35789332c6c89530c0 diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx index f3eca23..fac1191 100644 --- a/sc/source/filter/xml/xmlcelli.cxx +++ b/sc/source/filter/xml/xmlcelli.cxx @@ -167,7 +167,8 @@ ScXMLTableRowCellContext::ScXMLTableRowCellContext( ScXMLImport& rImport, nMatrixRows = static_cast<SCROW>(sValue.toInt32()); break; case XML_TOK_TABLE_ROW_CELL_ATTR_REPEATED: - nColsRepeated = static_cast<SCCOL>(std::max( sValue.toInt32(), static_cast<sal_Int32>(1) )); + nColsRepeated = static_cast<SCCOL>(std::min<sal_Int32>( MAXCOLCOUNT, + std::max( sValue.toInt32(), static_cast<sal_Int32>(1) ) )); break; case XML_TOK_TABLE_ROW_CELL_ATTR_VALUE_TYPE: nCellType = GetScImport().GetCellType(sValue); commit 9bcfb6f06bf5a4708b8858469b4118af4222db5a Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Fri Jan 4 03:17:13 2013 +0100 add some more safety checks for row and column import from ODS Change-Id: Ic714c65cfe93198c462ba55752223f4e60e5aad9 diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx index 5a5d73f..f3eca23 100644 --- a/sc/source/filter/xml/xmlcelli.cxx +++ b/sc/source/filter/xml/xmlcelli.cxx @@ -833,6 +833,12 @@ void ScXMLTableRowCellContext::AddTextAndValueCells( const ScAddress& rCellPos, for (SCCOL i = 0; i < nColsRepeated; ++i) { rCurrentPos.SetCol( rCellPos.Col() + i ); + + // it makes no sense to import data after the last supported column + // fdo#58539 & gnome#627150 + if(rCurrentPos.Col() > MAXCOL) + break; + if (i > 0) rTables.AddColumn(false); if (!bIsEmpty) @@ -840,6 +846,12 @@ void ScXMLTableRowCellContext::AddTextAndValueCells( const ScAddress& rCellPos, for (SCROW j = 0; j < nRepeatedRows; ++j) { rCurrentPos.SetRow( rCellPos.Row() + j ); + + // it makes no sense to import data after last supported row + // fdo#58539 & gnome#627150 + if(rCurrentPos.Row() > MAXROW) + break; + if( (rCurrentPos.Col() == 0) && (j > 0) ) { rTables.AddRow(); diff --git a/sc/source/filter/xml/xmlcoli.cxx b/sc/source/filter/xml/xmlcoli.cxx index 688300e..ed89294 100644 --- a/sc/source/filter/xml/xmlcoli.cxx +++ b/sc/source/filter/xml/xmlcoli.cxx @@ -66,7 +66,8 @@ ScXMLTableColContext::ScXMLTableColContext( ScXMLImport& rImport, { case XML_TOK_TABLE_COL_ATTR_REPEATED: { - nColCount = sValue.toInt32(); + nColCount = std::max<sal_Int32>(sValue.toInt32(), 1); + nColCount = std::min<sal_Int32>(nColCount, MAXCOLCOUNT); } break; case XML_TOK_TABLE_COL_ATTR_STYLE_NAME: diff --git a/sc/source/filter/xml/xmlrowi.cxx b/sc/source/filter/xml/xmlrowi.cxx index 67d1f23..a4434e1 100644 --- a/sc/source/filter/xml/xmlrowi.cxx +++ b/sc/source/filter/xml/xmlrowi.cxx @@ -83,6 +83,7 @@ ScXMLTableRowContext::ScXMLTableRowContext( ScXMLImport& rImport, case XML_TOK_TABLE_ROW_ATTR_REPEATED: { nRepeatedRows = std::max( sValue.toInt32(), (sal_Int32) 1 ); + nRepeatedRows = std::min( nRepeatedRows, MAXROWCOUNT ); } break; case XML_TOK_TABLE_ROW_ATTR_DEFAULT_CELL_STYLE_NAME: commit 3e85d9c62c69ee39dd4c6ae7cd556fdf53f5e01d Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Fri Jan 4 02:59:23 2013 +0100 workaround problems with row import, fdo#58539 This fixes another crash with gnome#627150 Change-Id: Ibd259c77f8df04b52c9fee0699e0edd1ad30e94e diff --git a/sc/source/filter/xml/xmlrowi.cxx b/sc/source/filter/xml/xmlrowi.cxx index ea58165..67d1f23 100644 --- a/sc/source/filter/xml/xmlrowi.cxx +++ b/sc/source/filter/xml/xmlrowi.cxx @@ -97,6 +97,7 @@ ScXMLTableRowContext::ScXMLTableRowContext( ScXMLImport& rImport, break;*/ } } + mnLastRow = GetScImport().GetTables().GetCurrentRow() + nRepeatedRows; GetScImport().GetTables().AddRow(); GetScImport().GetTables().SetRowStyle(sCellStyleName); } @@ -154,6 +155,12 @@ void ScXMLTableRowContext::EndElement() } SCTAB nSheet = rXMLImport.GetTables().GetCurrentSheet(); sal_Int32 nCurrentRow(rXMLImport.GetTables().GetCurrentRow()); + if(nCurrentRow != mnLastRow) + { + // this document is most likely invalid in some way + SAL_WARN("sc", "we did not generate enough rows in the cell import!!"); + nCurrentRow = mnLastRow; + } uno::Reference<sheet::XSpreadsheet> xSheet(rXMLImport.GetTables().GetCurrentXSheet()); if(xSheet.is()) { diff --git a/sc/source/filter/xml/xmlrowi.hxx b/sc/source/filter/xml/xmlrowi.hxx index a900ff7..02c5255 100644 --- a/sc/source/filter/xml/xmlrowi.hxx +++ b/sc/source/filter/xml/xmlrowi.hxx @@ -29,6 +29,8 @@ class ScXMLTableRowContext : public SvXMLImportContext rtl::OUString sStyleName; rtl::OUString sVisibility; sal_Int32 nRepeatedRows; + sal_Int32 mnLastRow; // to workaround problems with the cell import, can be removed when the cell + // always adds enough rows bool bHasCell; const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); } commit 6e26f941e162da811fcc449f2f6cce083d21100c Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Thu Jan 3 23:54:27 2013 +0100 initialize it irectly in the constructor Change-Id: If3ad494073d3fb491a0f8e981a28db5bbb917661 diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx index 398a49c..5a5d73f 100644 --- a/sc/source/filter/xml/xmlcelli.cxx +++ b/sc/source/filter/xml/xmlcelli.cxx @@ -1002,8 +1002,8 @@ void ScXMLTableRowCellContext::PutFormulaCell( const ScAddress& rCellPos ) rtl::OUString aText = pOUFormula->first; rtl::OUString aFormulaNmsp = pOUFormula->second; - ::boost::scoped_ptr<ScExternalRefManager::ApiGuard> pExtRefGuard; - pExtRefGuard.reset(new ScExternalRefManager::ApiGuard(pDoc)); + ::boost::scoped_ptr<ScExternalRefManager::ApiGuard> pExtRefGuard ( + new ScExternalRefManager::ApiGuard(pDoc)); if ( !aText.isEmpty() ) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits