From cba9a06b88c8992d9a4d69853c0f95bc4c526442 Mon Sep 17 00:00:00 2001 From: Andreas Heinisch Date: Wed, 19 Aug 2026 13:15:21 +0200 Subject: [PATCH] tdf#44196 - Keep relative paths on URL export Change-Id: I2ee01e6ef1d1d7dbf2dbbf69440567d152e48f96 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/209326 Tested-by: Jenkins Reviewed-by: Andreas Heinisch --- sc/qa/extras/htmlexporttest.cxx | 17 +++++++++++++++++ .../testdocuments/tdf44196_relative_href.html | 1 + sc/source/filter/html/htmlexp.cxx | 4 +++- 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 sc/qa/extras/testdocuments/tdf44196_relative_href.html diff --git a/sc/qa/extras/htmlexporttest.cxx b/sc/qa/extras/htmlexporttest.cxx index b59d14802d7e..2801aa2be7f6 100644 --- a/sc/qa/extras/htmlexporttest.cxx +++ b/sc/qa/extras/htmlexporttest.cxx @@ -57,9 +57,26 @@ public: CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), styles.indexOf(".Default")); } + void testTdf44196_relative_href() + { + loadFromFile(u"tdf44196_relative_href.html", + { + comphelper::makePropertyValue(u"FilterName"_ustr, u"HTML (StarCalc)"_ustr), + }); + save(TestFilter::HTML_CALC); + + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + CPPUNIT_ASSERT(pDoc); + + // Without the fix in place, this test would have failed + // i.e. href attribute would have beend turned into an absolute file + CPPUNIT_ASSERT(!getXPath(pDoc, "//a", "href").startsWith("file:")); + } + CPPUNIT_TEST_SUITE(ScHTMLExportTest); CPPUNIT_TEST(testHtmlSkipImage); CPPUNIT_TEST(testTdf155244); + CPPUNIT_TEST(testTdf44196_relative_href); CPPUNIT_TEST_SUITE_END(); }; diff --git a/sc/qa/extras/testdocuments/tdf44196_relative_href.html b/sc/qa/extras/testdocuments/tdf44196_relative_href.html new file mode 100644 index 000000000000..2914c07d72fd --- /dev/null +++ b/sc/qa/extras/testdocuments/tdf44196_relative_href.html @@ -0,0 +1 @@ +Text diff --git a/sc/source/filter/html/htmlexp.cxx b/sc/source/filter/html/htmlexp.cxx index 6287447c0e97..dee26854c660 100644 --- a/sc/source/filter/html/htmlexp.cxx +++ b/sc/source/filter/html/htmlexp.cxx @@ -1396,7 +1396,9 @@ bool ScHTMLExport::WriteFieldText( const EditTextObject* pData ) { bUrl = true; rStrm.WriteChar( '<' ).WriteOString( OOO_STRING_SVTOOLS_HTML_anchor ).WriteChar( ' ' ).WriteOString( OOO_STRING_SVTOOLS_HTML_O_href ).WriteOString( "=\"" ); - OUT_STR( pURLField->GetURL() ); + // tdf#44196 - keep relative paths on URL export + OUT_STR(URIHelper::simpleNormalizedMakeRelative(aBaseURL, + pURLField->GetURL())); rStrm.WriteOString( "\">" ); OUT_STR( pURLField->GetRepresentation() ); rStrm.WriteOString( "' );