summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Weghorn <m.weghorn@posteo.de>2021-01-20 12:41:47 +0100
committerAndras Timar <andras.timar@collabora.com>2022-05-31 15:43:30 +0200
commit678b4fdcc671a7c3a59e0213f4f7fd5f06d00275 (patch)
treee7daec893f23712120694e51f2a13b9ddaca25f2
parent43e17ad92529426d0fe7d661640242b3d3df42df (diff)
Related tdf#139782 sc: Make sure column exists before accessing it
While the first fix (Change-Id I12a780bf52024cef31188651813d3a93cc2b5ddd, "tdf#139782 sc: Don't try to access unallocated column") makes opening the simplified bugdoc I had attached to tdf#139782 work, the original document I was given (which I can't share as is, but from which the simplified bugdoc was created) had more formulas and managed to hit another similar issue related to the fact that columns are now dynamically allocated, and crashed trying to access one that wasn't yet allocated. Fix this place as well by making sure the column exists. Backtrace: "#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50\n" "#1 0x00007ffff7aa7537 in __GI_abort () at abort.c:79\n" "#2 0x00007ffff794beb1 in std::__throw_bad_exception() () at /lib/x86_64-linux-gnu/libstdc++.so.6\n" "#3 0x00007fffa0b161dc in std::__debug::vector<std::unique_ptr<ScColumn, o3tl::default_delete<ScColumn> >, std::allocator<std::unique_ptr<ScColumn, o3tl::default_delete<ScColumn> > > >::operator[](unsigned long) (this=0x555558827250, __n=84) at /usr/include/c++/10/debug/vector:427\n" "#4 0x00007fffa0c23935 in ScColContainer::operator[](unsigned long) (this=0x555558827250, nIndex=84) at .../libreoffice/sc/inc/colcontainer.hxx:44\n" "#5 0x00007fffa0c76275 in ScQueryCellIterator::InitPos() (this=0x7fffffff8040) at .../libreoffice/sc/source/core/data/dociter.cxx:1082\n" "#6 0x00007fffa0c76c28 in ScQueryCellIterator::GetFirst() (this=0x7fffffff8040) at .../libreoffice/sc/source/core/data/dociter.cxx:1233\n" "#7 0x00007fffa0c76fb6 in ScQueryCellIterator::FindEqualOrSortedLastInRange(short&, int&) (this=0x7fffffff8040, nFoundCol=@0x7fffffff7f58: 1024, nFoundRow=@0x7fffffff7fb0: 1048576) at .../libreoffice/sc/source/core/data/dociter.cxx:1304\n" "#8 0x00007fffa11b1529 in ScInterpreter::ScMatch() (this=0x5555619f7fd0) at .../libreoffice/sc/source/core/tool/interpr1.cxx:5050\n" "#9 0x00007fffa121f653 in ScInterpreter::Interpret() (this=0x5555619f7fd0) at .../libreoffice/sc/source/core/tool/interpr4.cxx:4247\n" "#10 0x00007fffa0f03bf5 in ScFormulaCell::InterpretTail(ScInterpreterContext&, ScFormulaCell::ScInterpretTailParameter) (this=0x55555e793030, rContext=..., eTailParam=ScFormulaCell::SCITP_NORMAL) at .../libreoffice/sc/source/core/data/formulacell.cxx:1952\n" "#11 0x00007fffa0f028b2 in ScFormulaCell::Interpret(int, int) (this=0x55555e793030, nStartOffset=-1, nEndOffset=-1) at .../libreoffice/sc/source/core/data/formulacell.cxx:1644\n" "#12 0x00007fffa0be0274 in ScFormulaCell::MaybeInterpret() (this=0x55555e793030) at .../libreoffice/sc/inc/formulacell.hxx:445\n" "#13 0x00007fffa0f07b34 in ScFormulaCell::GetErrCode() (this=0x55555e793030) at .../libreoffice/sc/source/core/data/formulacell.cxx:2974\n" "#14 0x00007fffa10bac28 in ScCellFormat::GetString(ScRefCellValue const&, unsigned int, rtl::OUString&, Color const**, SvNumberFormatter&, ScDocument const&, bool, bool, bool) (rCell=..., nFormat=0, rString=\"\", ppColor=0x7fffffff87e8, rFormatter=..., rDoc=..., bNullVals=true, bFormula=false, bUseStarFormat=false) at .../libreoffice/sc/source/core/tool/cellform.cxx:77\n" "#15 0x00007fffa0bcb8f8 in ScColumn::UpdateScriptType(sc::CellTextAttr&, int, mdds::detail::mtv::iterator_base<mdds::multi_type_vector<mdds::mtv::custom_block_func3<mdds::mtv::default_element_block<52, svl::SharedString>, mdds::mtv::noncopyable_managed_element_block<53, EditTextObject>, mdds::mtv::noncopyable_managed_element_block<54, ScFormulaCell> >, sc::CellStoreEvent>::iterator_trait, mdds::detail::mtv::private_data_forward_update<mdds::detail::mtv::iterator_value_node<unsigned long, mdds::mtv::base_element_block> > >&) (this=0x55555e793330, rAttr=..., nRow=1, itr=...) at .../libreoffice/sc/source/core/data/column3.cxx:794\n" "#16 0x00007fffa0b9e315 in ScColumn::GetRangeScriptType(mdds::detail::mtv::iterator_base<mdds::multi_type_vector<mdds::mtv::custom_block_func1<mdds::mtv::default_element_block<51, sc::CellTextAttr> >, mdds::detail::mtv::event_func>::iterator_trait, mdds::detail::mtv::private_data_forward_update<mdds::detail::mtv::iterator_value_node<unsigned long, mdds::mtv::base_element_block> > >&, int, int, mdds::detail::mtv::iterator_base<mdds::multi_type_vector<mdds::mtv::custom_block_func3<mdds::mtv::default_element_block<52, svl::SharedString>, mdds::mtv::noncopyable_managed_element_block<53, EditTextObject>, mdds::mtv::noncopyable_managed_element_block<54, ScFormulaCell> >, sc::CellStoreEvent>::iterator_trait, mdds::detail::mtv::private_data_forward_update<mdds::detail::mtv::iterator_value_node<unsigned long, mdds::mtv::base_element_block> > > const&) (this=0x55555e793330, itPos=..., nRow1=1, nRow2=1, itrCells_=...) at .../libreoffice/sc/source/core/data/column2.cxx:2089\n" "#17 0x00007fffa0b27563 in (anonymous namespace)::FindEditCellsHandler::operator()(size_t, ScFormulaCell const*) (this=0x7fffffff9180, nRow=1, p=0x55555e793030) at .../libreoffice/sc/source/core/data/column.cxx:3091\n" "#18 0x00007fffa0b31267 in sc::CheckElem<mdds::mtv::noncopyable_managed_element_block<54, ScFormulaCell>, mdds::multi_type_vector<mdds::mtv::custom_block_func3<mdds::mtv::default_element_block<52, svl::SharedString>, mdds::mtv::noncopyable_managed_element_block<53, EditTextObject>, mdds::mtv::noncopyable_managed_element_block<54, ScFormulaCell> >, sc::CellStoreEvent>, (anonymous namespace)::FindEditCellsHandler>(mdds::multi_type_vector<mdds::mtv::custom_block_func3<mdds::mtv::default_element_block<52, svl::SharedString>, mdds::mtv::noncopyable_managed_element_block<53, EditTextObject>, mdds::mtv::noncopyable_managed_element_block<54, ScFormulaCell> >, sc::CellStoreEvent> const&, mdds::multi_type_vector<mdds::mtv::custom_block_func3<mdds::mtv::default_element_block<52, svl::SharedString>, mdds::mtv::noncopyable_managed_element_block<53, EditTextObject>, mdds::mtv::noncopyable_managed_element_block<54, ScFormulaCell> >, sc::CellStoreEvent>::const_iterator const&, size_t, size_t, (anonymous namespace)::FindEditCellsHandler&) (rStore=..., it=..., nOffset=0, nDataSize=999, rFuncElem=...) at .../libreoffice/sc/inc/mtvfunctions.hxx:149\n" "#19 0x00007fffa0b2eb58 in sc::FindElement2<mdds::multi_type_vector<mdds::mtv::custom_block_func3<mdds::mtv::default_element_block<52, svl::SharedString>, mdds::mtv::noncopyable_managed_element_block<53, EditTextObject>, mdds::mtv::noncopyable_managed_element_block<54, ScFormulaCell> >, sc::CellStoreEvent>, mdds::mtv::noncopyable_managed_element_block<53, EditTextObject>, mdds::mtv::noncopyable_managed_element_block<54, ScFormulaCell>, (anonymous namespace)::FindEditCellsHandler, (anonymous namespace)::FindEditCellsHandler>(mdds::multi_type_vector<mdds::mtv::custom_block_func3<mdds::mtv::default_element_block<52, svl::SharedString>, mdds::mtv::noncopyable_managed_element_block<53, EditTextObject>, mdds::mtv::noncopyable_managed_element_block<54, ScFormulaCell> >, sc::CellStoreEvent> const&, mdds::multi_type_vector<mdds::mtv::custom_block_func3<mdds::mtv::default_element_block<52, svl::SharedString>, mdds::mtv::noncopyable_managed_element_block<53, EditTextObject>, mdds::mtv::noncopyable_managed_element_block<54, ScFormulaCell> >, sc::CellStoreEvent>::size_type, mdds::multi_type_vector<mdds::mtv::custom_block_func3<mdds::mtv::default_element_block<52, svl::SharedString>, mdds::mtv::noncopyable_managed_element_block<53, EditTextObject>, mdds::mtv::noncopyable_managed_element_block<54, ScFormulaCell> >, sc::CellStoreEvent>::size_type, (anonymous namespace)::FindEditCellsHandler&, (anonymous namespace)::FindEditCellsHandler&) (rStore=..., nStart=0, nEnd=1048575, rFuncElem=..., rFuncElse=...) at .../libreoffice/sc/inc/mtvfunctions.hxx:496\n" "#20 0x00007fffa0b2b487 in sc::FindFormulaEditText<(anonymous namespace)::FindEditCellsHandler>(sc::CellStoreType const&, SCROW, SCROW, (anonymous namespace)::FindEditCellsHandler&) (rStore=..., nRow1=0, nRow2=1048575, rFunc=...) at .../libreoffice/sc/inc/mtvcellfunc.hxx:141\n" "#21 0x00007fffa0b293e3 in ScColumn::HasEditCells(int, int, int&) (this=0x55555e793330, nStartRow=0, nEndRow=1048575, rFirst=@0x7fffffff92ec: 0) at .../libreoffice/sc/source/core/data/column.cxx:3434\n" "#22 0x00007fffa0b981b1 in ScColumn::GetOptimalHeight(sc::RowHeightContext&, int, int, unsigned short, int) (this=0x55555e793330, rCxt=..., nStartRow=0, nEndRow=1048575, nMinHeight=0, nMinStart=0) at .../libreoffice/sc/source/core/data/column2.cxx:863\n" "#23 0x00007fffa0fcaf7d in (anonymous namespace)::GetOptimalHeightsInColumn(sc::RowHeightContext&, ScColContainer&, SCROW, SCROW, ScProgress*, sal_uLong) (rCxt=..., rCol=..., nStartRow=0, nEndRow=1048575, pProgress=0x7fffffff9740, nProgressStart=406268) at .../libreoffice/sc/source/core/data/table1.cxx:93\n" "#24 0x00007fffa0fccdae in ScTable::SetOptimalHeight(sc::RowHeightContext&, int, int, ScProgress*, unsigned long) (this=0x55555a39e890, rCxt=..., nStartRow=0, nEndRow=1048575, pOuterProgress=0x7fffffff9740, nProgressStart=406268) at .../libreoffice/sc/source/core/data/table1.cxx:470\n" "#25 0x00007fffa0c7ced6 in ScDocRowHeightUpdater::update() (this=0x7fffffff9910) at .../libreoffice/sc/source/core/data/dociter.cxx:2732\n" "#26 0x00007fffa15aae65 in ScXMLImport::endDocument() (this=0x555558902ec0) at .../libreoffice/sc/source/filter/xml/xmlimprt.cxx:1443\n" "#27 0x00007fff99f9e04b in sax_fastparser::FastSaxParserImpl::parseStream(com::sun::star::xml::sax::InputSource const&) (this=0x555559b8e0f0, rStructSource=...) at .../libreoffice/sax/source/fastparser/fastparser.cxx:911\n" "#28 0x00007fff99fa2318 in sax_fastparser::FastSaxParser::parseStream(com::sun::star::xml::sax::InputSource const&) (this=0x55555a718940, aInputSource=...) at .../libreoffice/sax/source/fastparser/fastparser.cxx:1482\n" "#29 0x00007fffecc8fa95 in SvXMLImport::parseStream(com::sun::star::xml::sax::InputSource const&) (this=0x555558902ec0, aInputSource=...) at .../libreoffice/xmloff/source/core/xmlimp.cxx:504\n" "#30 0x00007fffa15e0863 in ScXMLImportWrapper::ImportFromComponent(com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext> const&, com::sun::star::uno::Reference<com::sun::star::frame::XModel> const&, com::sun::star::xml::sax::InputSource&, rtl::OUString const&, rtl::OUString const&, com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&, bool) (this=0x7fffffffa2b0, xContext=uno::Reference to (cppu::(anonymous namespace)::ComponentContext *) 0x55555591a590, xModel=uno::Reference to (ScModelObj *) 0x55555a39fe50, aParserInput=..., sComponentName=\"com.sun.star.comp.Calc.XMLOasisContentImporter\", sDocName=\"content.xml\", aArgs=uno::Sequence of length 4 = {...}, bMustBeSuccessfull=true) at .../libreoffice/sc/source/filter/xml/xmlwrap.cxx:182\n" "#31 0x00007fffa15e3c0b in ScXMLImportWrapper::Import(ImportFlags, ErrCode&) (this=0x7fffffffa2b0, nMode=ImportFlags::All, rError=...) at .../libreoffice/sc/source/filter/xml/xmlwrap.cxx:510\n" "#32 0x00007fffa182aa1c in ScDocShell::LoadXML(SfxMedium*, com::sun::star::uno::Reference<com::sun::star::embed::XStorage> const&) (this=0x55555a783820, pLoadMedium=0x55555aa07260, xStor=empty uno::Reference) at .../libreoffice/sc/source/ui/docshell/docsh.cxx:482\n" "#33 0x00007fffa182b423 in ScDocShell::Load(SfxMedium&) (this=0x55555a783820, rMedium=...) at .../libreoffice/sc/source/ui/docshell/docsh.cxx:629\n" "#34 0x00007ffff5182831 in SfxObjectShell::LoadOwnFormat(SfxMedium&) (this=0x55555a783820, rMedium=...) at .../libreoffice/sfx2/source/doc/objstor.cxx:3128\n" "#35 0x00007ffff5174ee3 in SfxObjectShell::DoLoad(SfxMedium*) (this=0x55555a783820, pMed=0x55555aa07260) at .../libreoffice/sfx2/source/doc/objstor.cxx:677\n" "#36 0x00007ffff51c5544 in SfxBaseModel::load(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) (this=0x55555a39fdc0, seqArguments=uno::Sequence of length 16 = {...}) at .../libreoffice/sfx2/source/doc/sfxbasemodel.cxx:1883\n" "#37 0x00007ffff52f307f in (anonymous namespace)::SfxFrameLoader_Impl::load(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&, com::sun::star::uno::Reference<com::sun::star::frame::XFrame> const&) (this=0x5555587e4650, rArgs=uno::Sequence of length 13 = {...}, _rTargetFrame=uno::Reference to ((anonymous namespace)::XFrameImpl *) 0x5555569f3330) at .../libreoffice/sfx2/source/view/frmload.cxx:681\n" "#38 0x00007ffff5fd8854 in framework::LoadEnv::impl_loadContent() (this=0x555557039788) at .../libreoffice/framework/source/loadenv/loadenv.cxx:1163\n" "#39 0x00007ffff5fd45c7 in framework::LoadEnv::start() (this=0x555557039788) at .../libreoffice/framework/source/loadenv/loadenv.cxx:394\n" [..] Change-Id: I2d61e4a29543b1d331ae63d7ec023e88395e0b68 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109705 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> (cherry picked from commit fc3b904b671a71266db2e8b30cbeeef4f7981753) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109814 Tested-by: Michael Weghorn <m.weghorn@posteo.de> Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
-rw-r--r--sc/source/core/data/dociter.cxx4
1 files changed, 2 insertions, 2 deletions
diff --git a/sc/source/core/data/dociter.cxx b/sc/source/core/data/dociter.cxx
index 7323eeb4ee40..407c5484a4c2 100644
--- a/sc/source/core/data/dociter.cxx
+++ b/sc/source/core/data/dociter.cxx
@@ -1080,8 +1080,8 @@ void ScQueryCellIterator::InitPos()
nRow = mpParam->nRow1;
if (mpParam->bHasHeader && mpParam->bByRow)
++nRow;
- ScColumn* pCol = &(pDoc->maTabs[nTab])->aCol[nCol];
- maCurPos = pCol->maCells.position(nRow);
+ const ScColumn& rCol = pDoc->maTabs[nTab]->CreateColumnIfNotExists(nCol);
+ maCurPos = rCol.maCells.position(nRow);
}
void ScQueryCellIterator::IncPos()