From 0181f557b35eab1a96beb86736e5f76dbb0182e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Fri, 1 Apr 2022 15:08:09 +0100 Subject: [PATCH] forcepoint#97 avoid Invalid read of size 2 ==143282== Invalid read of size 2 ==143282== at 0x190CDBFC: SfxItemSet::Count() const (itemset.hxx:96) ==143282== by 0x1910F33E: SfxItemSet::Get(unsigned short, bool) const (itemset.cxx:748) ==143282== by 0x1F14D76C: ScPatternAttr::GetItem(unsigned short, SfxItemSet const&, SfxItemSet const*) (patattr.cxx:1347) ==143282== by 0x1F14D7DA: ScPatternAttr::GetItem(unsigned short, SfxItemSet const*) const (patattr.cxx:1352) ==143282== by 0x202A3E44: ScLineBreakCell const& ScPatternAttr::GetItem(TypedWhichId, SfxItemSet const*) const (patattr.hxx:83) ==143282== by 0x2028E8BC: ScOutputData::LayoutStrings(bool, bool, ScAddress const&) (output2.cxx:1677) ==143282== by 0x2028D4A8: ScOutputData::DrawStrings(bool) (output2.cxx:1473) ==143282== by 0x202D9879: ScPrintFunc::PrintArea(short, int, short, int, long, long, bool, bool, bool, bool) (printfun.cxx:1675) ==143282== by 0x202DD459: ScPrintFunc::PrintPage(long, short, int, short, int, bool, ScPreviewLocationData*) (printfun.cxx:2301) ==143282== by 0x202DF491: ScPrintFunc::DoPrint(MultiSelection const&, long, long, bool, ScPreviewLocationData*) (printfun.cxx:2713) ==143282== by 0x20031888: ScModelObj::render(int, com::sun::star::uno::Any const&, com::sun::star::uno::Sequence const&) (docuno.cxx:2259) ==143282== by 0x30C1A485: PDFExport::ExportSelection(vcl::PDFWriter&, com::sun::star::uno::Reference const&, com::sun::star::uno::Any const&, StringRangeEnumerator const&, com::sun::star::uno::Sequence&, int) (pdfexport.cxx:219) ==143282== by 0x30C1F879: PDFExport::Export(rtl::OUString const&, com::sun::star::uno::Sequence const&) (pdfexport.cxx:987) ==143282== by 0x30C33BA2: PDFFilter::implExport(com::sun::star::uno::Sequence const&) (pdffilter.cxx:174) ==143282== by 0x30C33F2A: PDFFilter::filter(com::sun::star::uno::Sequence const&) (pdffilter.cxx:237) ==143282== by 0x21AC6986: SfxObjectShell::ExportTo(SfxMedium&) (objstor.cxx:2488) ==143282== by 0x21AC2363: SfxObjectShell::SaveTo_Impl(SfxMedium&, SfxItemSet const*) (objstor.cxx:1553) ==143282== by 0x21ACE816: SfxObjectShell::PreDoSaveAs_Impl(rtl::OUString const&, rtl::OUString const&, SfxItemSet const&, com::sun::star::uno::Sequence const&) (objstor.cxx:2966) ==143282== by 0x21ACCA87: SfxObjectShell::CommonSaveAs_Impl(INetURLObject const&, rtl::OUString const&, SfxItemSet&, com::sun::star::uno::Sequence const&) (objstor.cxx:2756) ==143282== by 0x21AA8CDB: SfxObjectShell::APISaveAs_Impl(rtl::OUString const&, SfxItemSet&, com::sun::star::uno::Sequence const&) (objserv.cxx:317) ==143282== by 0x21B2B4AD: SfxBaseModel::impl_store(rtl::OUString const&, com::sun::star::uno::Sequence const&, bool) (sfxbasemodel.cxx:3132) ==143282== by 0x21B2CB12: SfxBaseModel::storeToURL(rtl::OUString const&, com::sun::star::uno::Sequence const&) (sfxbasemodel.cxx:1768) ==143282== by 0x1C507AFE: ScPDFExportTest::exportToPDF(com::sun::star::uno::Reference const&, ScRange const&) (scpdfexport.cxx:192) ==143282== by 0x1C511A33: ScPDFExportTest::testForcepoint97() (scpdfexport.cxx:571) ==143282== by 0x1C52778D: void std::__invoke_impl(std::__invoke_memfun_deref, void (ScPDFExportTest::*&)(), ScPDFExportTest*&) (invoke.h:74) ==143282== by 0x1C5276C1: std::__invoke_result::type std::__invoke(void (ScPDFExportTest::*&)(), ScPDFExportTest*&) (invoke.h:96) ==143282== by 0x1C527659: void std::_Bind::__call(std::tuple<>&&, std::_Index_tuple<0ul>) (functional:420) ==143282== by 0x1C5275E2: void std::_Bind::operator()<, void>() (functional:503) ==143282== by 0x1C52758C: void std::__invoke_impl&>(std::__invoke_other, std::_Bind&) (invoke.h:61) ==143282== by 0x1C52753C: std::enable_if&>, void>::type std::__invoke_r&>(std::_Bind&) (invoke.h:111) ==143282== by 0x1C52731C: std::_Function_handler >::_M_invoke(std::_Any_data const&) (std_function.h:290) ==143282== by 0x1C527A34: std::function::operator()() const (std_function.h:590) ==143282== by 0x1C527078: CppUnit::TestCaller::runTest() (TestCaller.h:175) ==143282== by 0x49326F2: CppUnit::TestCaseMethodFunctor::operator()() const (TestCase.cpp:32) ==143282== by 0x15937E3D: (anonymous namespace)::Protector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (vclbootstrapprotector.cxx:46) ==143282== by 0x4929ED1: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20) ==143282== by 0x4B05D6D: (anonymous namespace)::Prot::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (unobootstrapprotector.cxx:78) ==143282== by 0x4929ED1: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20) ==143282== by 0x4AF2F2A: (anonymous namespace)::Prot::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (unoexceptionprotector.cxx:62) ==143282== by 0x4929ED1: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20) ==143282== by 0x491261E: CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (DefaultProtector.cpp:15) ==143282== by 0x4929ED1: CppUnit::ProtectorChain::ProtectFunctor::operator()() const (ProtectorChain.cpp:20) ==143282== by 0x4928690: CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) (ProtectorChain.cpp:86) ==143282== by 0x4946ACD: CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::__cxx11::basic_string, std::allocator > const&) (TestResult.cpp:182) ==143282== by 0x4932103: CppUnit::TestCase::run(CppUnit::TestResult*) (TestCase.cpp:91) ==143282== by 0x4932BCF: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64) ==143282== by 0x4932A5F: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23) ==143282== by 0x4932BCF: CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) (TestComposite.cpp:64) ==143282== by 0x4932A5F: CppUnit::TestComposite::run(CppUnit::TestResult*) (TestComposite.cpp:23) ==143282== by 0x494FDBF: CppUnit::TestRunner::WrappingSuite::run(CppUnit::TestResult*) (TestRunner.cpp:47) ==143282== Address 0x1d7624b0 is 64 bytes inside a block of size 120 free'd ==143282== at 0x4847669: operator delete(void*) (vg_replace_malloc.c:923) ==143282== by 0x1F150EA1: ScPatternAttr::~ScPatternAttr() (patattr.hxx:53) ==143282== by 0x190D29B2: SfxItemPool::Remove(SfxPoolItem const&) (itempool.cxx:802) ==143282== by 0x1EA27F8E: ScAttrArray::SetPatternAreaImpl(int, int, ScPatternAttr const*, bool, ScEditDataArray*, bool) (attarray.cxx:574) ==143282== by 0x1EBF43D5: ScAttrArray::SetPattern(int, ScPatternAttr const*, bool) (attarray.hxx:148) ==143282== by 0x1EBD9068: ScColumn::ApplyAttr(int, SfxPoolItem const&) (column.cxx:634) ==143282== by 0x1EC6C1EB: ScColumn::SetNumberFormat(int, unsigned int) (column2.cxx:3094) ==143282== by 0x1F1CB737: ScTable::SetNumberFormat(short, int, unsigned int) (table2.cxx:2238) ==143282== by 0x1EE3F135: ScDocument::SetNumberFormat(ScAddress const&, unsigned int) (document.cxx:3717) ==143282== by 0x1F09CCA5: ScFormulaCell::InterpretTail(ScInterpreterContext&, ScFormulaCell::ScInterpretTailParameter) (formulacell.cxx:2155) ==143282== by 0x1F099D9F: ScFormulaCell::Interpret(int, int) (formulacell.cxx:1615) ==143282== by 0x1ECC048D: ScFormulaCell::MaybeInterpret() (formulacell.hxx:465) ==143282== by 0x1F09F5C8: ScFormulaCell::IsValue() (formulacell.cxx:2760) ==143282== by 0x1EA82355: (anonymous namespace)::hasNumericImpl(CellType, ScFormulaCell*) (cellvalue.cxx:155) ==143282== by 0x1EA822FA: ScRefCellValue::hasNumeric() const (cellvalue.cxx:624) ==143282== by 0x2028E876: ScOutputData::LayoutStrings(bool, bool, ScAddress const&) (output2.cxx:1676) ==143282== by 0x2028D4A8: ScOutputData::DrawStrings(bool) (output2.cxx:1473) ==143282== by 0x202D9879: ScPrintFunc::PrintArea(short, int, short, int, long, long, bool, bool, bool, bool) (printfun.cxx:1675) ==143282== by 0x202DD459: ScPrintFunc::PrintPage(long, short, int, short, int, bool, ScPreviewLocationData*) (printfun.cxx:2301) ==143282== by 0x202DF491: ScPrintFunc::DoPrint(MultiSelection const&, long, long, bool, ScPreviewLocationData*) (printfun.cxx:2713) ==143282== by 0x20031888: ScModelObj::render(int, com::sun::star::uno::Any const&, com::sun::star::uno::Sequence const&) (docuno.cxx:2259) ==143282== by 0x30C1A485: PDFExport::ExportSelection(vcl::PDFWriter&, com::sun::star::uno::Reference const&, com::sun::star::uno::Any const&, StringRangeEnumerator const&, com::sun::star::uno::Sequence&, int) (pdfexport.cxx:219) Change-Id: Idf19b79f5aef7e07666249f5f9ec510003a3f886 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132431 Tested-by: Jenkins Reviewed-by: Eike Rathke --- sc/inc/document.hxx | 5 +++++ sc/qa/extras/scpdfexport.cxx | 14 ++++++++++++++ sc/qa/extras/testdocuments/forcepoint97.xlsx | Bin 0 -> 21127 bytes sc/source/core/data/documen2.cxx | 1 + sc/source/core/data/formulacell.cxx | 3 ++- sc/source/ui/view/output2.cxx | 7 +++++++ 6 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 sc/qa/extras/testdocuments/forcepoint97.xlsx diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index 718079f9cf5f..59606dd6db38 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -569,6 +569,8 @@ private: bool mbFinalTrackFormulas : 1; // This indicates if a ScDocShell::DoRecalc() or ScDocShell::DoHardRecalc() is in progress. bool mbDocShellRecalc : 1; + // This indicates if a ScOutputData::LayoutStrings() is in progress. + bool mbLayoutStrings : 1; size_t mnMutationGuardFlags; @@ -2624,6 +2626,9 @@ public: bool IsInDocShellRecalc() const { return mbDocShellRecalc; } void SetDocShellRecalc(bool bSet) { mbDocShellRecalc = bSet; } + bool IsInLayoutStrings() const { return mbLayoutStrings; } + void SetLayoutStrings(bool bSet) { mbLayoutStrings = bSet; } + /** * Serializes the specified sheet's geometry data. * diff --git a/sc/qa/extras/scpdfexport.cxx b/sc/qa/extras/scpdfexport.cxx index 63ed2120c985..20edc99646ed 100644 --- a/sc/qa/extras/scpdfexport.cxx +++ b/sc/qa/extras/scpdfexport.cxx @@ -71,6 +71,7 @@ public: void testTdf143978(); void testTdf84012(); void testTdf78897(); + void testForcepoint97(); CPPUNIT_TEST_SUITE(ScPDFExportTest); CPPUNIT_TEST(testExportRange_Tdf120161); @@ -80,6 +81,7 @@ public: CPPUNIT_TEST(testTdf143978); CPPUNIT_TEST(testTdf84012); CPPUNIT_TEST(testTdf78897); + CPPUNIT_TEST(testForcepoint97); CPPUNIT_TEST_SUITE_END(); }; @@ -558,6 +560,18 @@ void ScPDFExportTest::testTdf78897() CPPUNIT_ASSERT_EQUAL(OUString(" 11.00 11.00 "), aActualText); } +// just needs to not crash on export to pdf +void ScPDFExportTest::testForcepoint97() +{ + mxComponent = loadFromDesktop(m_directories.getURLFromSrc(DATA_DIRECTORY) + "forcepoint97.xlsx", + "com.sun.star.sheet.SpreadsheetDocument"); + uno::Reference xModel(mxComponent, uno::UNO_QUERY); + + // A1:H81 + ScRange range1(0, 0, 0, 7, 81, 0); + std::shared_ptr pPDFFile = exportToPDF(xModel, range1); +} + CPPUNIT_TEST_SUITE_REGISTRATION(ScPDFExportTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sc/qa/extras/testdocuments/forcepoint97.xlsx b/sc/qa/extras/testdocuments/forcepoint97.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..152fbbc45a9f0556d873aa3f1c96be77ecd851b4 GIT binary patch literal 21127 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 WZ-6%|FoiKN@BkqTFp=i^gLnWU5wY(8 literal 0 HcmV?d00001 diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx index 83137e93ac37..bcdbd9b586e9 100644 --- a/sc/source/core/data/documen2.cxx +++ b/sc/source/core/data/documen2.cxx @@ -190,6 +190,7 @@ ScDocument::ScDocument( ScDocumentMode eMode, SfxObjectShell* pDocShell ) : mbTrackFormulasPending(false), mbFinalTrackFormulas(false), mbDocShellRecalc(false), + mbLayoutStrings(false), mnMutationGuardFlags(0) { maPreviewSelection = { *mxSheetLimits }; diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx index e8ee8682df60..404abe0988cc 100644 --- a/sc/source/core/data/formulacell.cxx +++ b/sc/source/core/data/formulacell.cxx @@ -2148,7 +2148,8 @@ void ScFormulaCell::InterpretTail( ScInterpreterContext& rContext, ScInterpretTa // XXX if mbNeedsNumberFormat was set even if the current format // was not General then we'd have to obtain the current format here // and check at least the types. - if (bSetFormat && (bForceNumberFormat || ((nFormatIndex % SV_COUNTRY_LANGUAGE_OFFSET) != 0))) + const bool bSetNumberFormat = bSetFormat && (bForceNumberFormat || ((nFormatIndex % SV_COUNTRY_LANGUAGE_OFFSET) != 0)); + if (bSetNumberFormat && !rDocument.IsInLayoutStrings()) { // set number format explicitly if (!rDocument.IsThreadedGroupCalcInProgress()) diff --git a/sc/source/ui/view/output2.cxx b/sc/source/ui/view/output2.cxx index 3fbd8eab65e9..55291b388514 100644 --- a/sc/source/ui/view/output2.cxx +++ b/sc/source/ui/view/output2.cxx @@ -75,6 +75,7 @@ #include #include +#include #include #include @@ -1472,6 +1473,12 @@ void ScOutputData::DrawStrings( bool bPixelToLogic ) tools::Rectangle ScOutputData::LayoutStrings(bool bPixelToLogic, bool bPaint, const ScAddress &rAddress) { + bool bOrigIsInLayoutStrings = mpDoc->IsInLayoutStrings(); + mpDoc->SetLayoutStrings(true); + comphelper::ScopeGuard g([this, bOrigIsInLayoutStrings] { + mpDoc->SetLayoutStrings(bOrigIsInLayoutStrings); + }); + OSL_ENSURE( mpDev == mpRefDevice || mpDev->GetMapMode().GetMapUnit() == mpRefDevice->GetMapMode().GetMapUnit(), "LayoutStrings: different MapUnits ?!?!" );