From 970058a668c720ce030c586465c81cdd4a105f2a Mon Sep 17 00:00:00 2001 From: Andreas Heinisch Date: Sun, 4 Oct 2026 17:13:57 +0200 Subject: [PATCH] tdf#170842 - Check for missing table style info on plain database ranges Change-Id: I8bed747726bd729fcef9b3845c8ba3e62f2ca2a7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211786 Reviewed-by: Andreas Heinisch Tested-by: Jenkins --- include/test/sheet/databaserange.hxx | 1 + sc/qa/extras/scdatabaserangeobj.cxx | 1 + sc/source/ui/unoobj/datauno.cxx | 20 ++++++++++++-------- test/source/sheet/databaserange.cxx | 11 +++++++++++ 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/include/test/sheet/databaserange.hxx b/include/test/sheet/databaserange.hxx index 9aca2f5eb390..e0ad38f3572f 100644 --- a/include/test/sheet/databaserange.hxx +++ b/include/test/sheet/databaserange.hxx @@ -32,6 +32,7 @@ public: void testTokenIndex(); void testTotalsRow(); void testContainsHeader(); + void testTdf170842_TableStylePropertiesPlainRange(); protected: ~DatabaseRange() {} diff --git a/sc/qa/extras/scdatabaserangeobj.cxx b/sc/qa/extras/scdatabaserangeobj.cxx index 4a035847bba8..0c220a866a59 100644 --- a/sc/qa/extras/scdatabaserangeobj.cxx +++ b/sc/qa/extras/scdatabaserangeobj.cxx @@ -51,6 +51,7 @@ public: CPPUNIT_TEST(testTokenIndex); CPPUNIT_TEST(testTotalsRow); CPPUNIT_TEST(testContainsHeader); + CPPUNIT_TEST(testTdf170842_TableStylePropertiesPlainRange); // XCellRangeReferrer CPPUNIT_TEST(testGetReferredCells); diff --git a/sc/source/ui/unoobj/datauno.cxx b/sc/source/ui/unoobj/datauno.cxx index a0454f8937bf..9e371c814628 100644 --- a/sc/source/ui/unoobj/datauno.cxx +++ b/sc/source/ui/unoobj/datauno.cxx @@ -2129,14 +2129,18 @@ uno::Any SAL_CALL ScDatabaseRangeObj::getPropertyValue( const OUString& aPropert { const ScTableStyleParam* pTableStyleInfo = GetDBData_Impl()->GetTableStyleInfo(); bool bVal = false; - if (aPropertyName == SC_UNONAME_ROW_STRIPES) - bVal = pTableStyleInfo->mbRowStripes; - else if (aPropertyName == SC_UNONAME_COL_STRIPES) - bVal = pTableStyleInfo->mbColumnStripes; - else if (aPropertyName == SC_UNONAME_FIRST_COL) - bVal = pTableStyleInfo->mbFirstColumn; - else if (aPropertyName == SC_UNONAME_LAST_COL) - bVal = pTableStyleInfo->mbLastColumn; + // tdf#170842 - check for missing table style info on plain database ranges + if (pTableStyleInfo) + { + if (aPropertyName == SC_UNONAME_ROW_STRIPES) + bVal = pTableStyleInfo->mbRowStripes; + else if (aPropertyName == SC_UNONAME_COL_STRIPES) + bVal = pTableStyleInfo->mbColumnStripes; + else if (aPropertyName == SC_UNONAME_FIRST_COL) + bVal = pTableStyleInfo->mbFirstColumn; + else if (aPropertyName == SC_UNONAME_LAST_COL) + bVal = pTableStyleInfo->mbLastColumn; + } aRet <<= bVal; } diff --git a/test/source/sheet/databaserange.cxx b/test/source/sheet/databaserange.cxx index ac7d6a38a5a8..92f8a144d359 100644 --- a/test/source/sheet/databaserange.cxx +++ b/test/source/sheet/databaserange.cxx @@ -214,6 +214,17 @@ void DatabaseRange::testContainsHeader() CPPUNIT_ASSERT(xDatabaseRange->getPropertyValue(propName) >>= bContainsHeader); CPPUNIT_ASSERT_MESSAGE("Value of ContainsHeader wasn't changed", !bContainsHeader); } + +void DatabaseRange::testTdf170842_TableStylePropertiesPlainRange() +{ + uno::Reference xDatabaseRange(init(u"DataArea"_ustr), UNO_QUERY_THROW); + + // Without the fix in place, this test would have crashed here + xDatabaseRange->getPropertyValue(u"UseRowStripes"_ustr); + xDatabaseRange->getPropertyValue(u"UseColStripes"_ustr); + xDatabaseRange->getPropertyValue(u"UseFirstColumnFormatting"_ustr); + xDatabaseRange->getPropertyValue(u"UseLastColumnFormatting"_ustr); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */