diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2021-12-21 14:31:34 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2021-12-21 17:04:51 +0100 |
commit | e519d7465f38367205b37bc80f0244029e352306 (patch) | |
tree | 6f5021fd07509609db3afec1fa5ee5f1f5f6ed1b /filter | |
parent | c35f81148fb18ba070516edcbb4d614444899235 (diff) |
filter: try to detect 0-byte DOC files based on extension
Commit ae1f51b4888a3aa14837ac6e4083f33b2176ca45 (tdf#123476 filter: try
to detect 0-byte files based on extension, 2020-10-28), already
implemented this UNO-based import filters, do the same for built-in
filters as well.
Another problem in filter/ was to pick the WW6 filter for .doc --
require export+preferred support in the filter to get WW8 instead.
An additional filter that may kick in is MS Word 2003 XML: this is
avoided by requiring "preferred".
Change-Id: I46e280beb5341213b0fe7a09a549b52c0c1ea3f6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127219
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
Diffstat (limited to 'filter')
-rw-r--r-- | filter/qa/unit/data/empty.doc | 0 | ||||
-rw-r--r-- | filter/qa/unit/textfilterdetect.cxx | 19 | ||||
-rw-r--r-- | filter/source/textfilterdetect/filterdetect.cxx | 6 |
3 files changed, 24 insertions, 1 deletions
diff --git a/filter/qa/unit/data/empty.doc b/filter/qa/unit/data/empty.doc new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/filter/qa/unit/data/empty.doc diff --git a/filter/qa/unit/textfilterdetect.cxx b/filter/qa/unit/textfilterdetect.cxx index 95c2b7697159..62d0d60a23a7 100644 --- a/filter/qa/unit/textfilterdetect.cxx +++ b/filter/qa/unit/textfilterdetect.cxx @@ -112,6 +112,25 @@ CPPUNIT_TEST_FIXTURE(TextFilterDetectTest, testEmptyFile) // Writer instead. CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.presentation.PresentationDocument")); getComponent()->dispose(); + + // ... and DOC + aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "empty.doc"; + // Without the accompanying fix in place, this test would have failed, the import filter aborted + // loading. + getComponent() = loadFromDesktop(aURL); + xServiceInfo.set(getComponent(), uno::UNO_QUERY); + CPPUNIT_ASSERT(xServiceInfo.is()); + CPPUNIT_ASSERT(xServiceInfo->supportsService("com.sun.star.text.TextDocument")); + uno::Reference<frame::XModel> xModel(getComponent(), uno::UNO_QUERY); + uno::Sequence<beans::PropertyValue> aArgs = xModel->getArgs(); + comphelper::SequenceAsHashMap aMap(aArgs); + OUString aFilterName; + aMap["FilterName"] >>= aFilterName; + // Without the accompanying fix in place, this test would have failed with: + // - Expected: MS Word 97 + // - Actual : MS WinWord 6.0 + // i.e. opening worked, but saving back failed instead of producing a WW8 binary file. + CPPUNIT_ASSERT_EQUAL(OUString("MS Word 97"), aFilterName); } } diff --git a/filter/source/textfilterdetect/filterdetect.cxx b/filter/source/textfilterdetect/filterdetect.cxx index 22db169b36e5..f8fc5cb865eb 100644 --- a/filter/source/textfilterdetect/filterdetect.cxx +++ b/filter/source/textfilterdetect/filterdetect.cxx @@ -148,7 +148,11 @@ bool HandleEmptyFileUrlByExtension(MediaDescriptor& rMediaDesc, const OUString& return false; } - std::shared_ptr<const SfxFilter> pFilter(SfxFilterMatcher().GetFilter4Extension(rExt)); + // Requiring the export+preferred flags helps to find the relevant filter, e.g. .doc -> WW8 (and + // not WW6 or Mac_Word). + SfxFilterFlags nMust + = SfxFilterFlags::IMPORT | SfxFilterFlags::EXPORT | SfxFilterFlags::PREFERED; + std::shared_ptr<const SfxFilter> pFilter(SfxFilterMatcher().GetFilter4Extension(rExt, nMust)); if (!pFilter) { return false; |