[Libreoffice-commits] core.git: sw/qa sw/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Feb 19 17:02:55 UTC 2019


 sw/qa/extras/ww8import/data/tdf110987 |binary
 sw/qa/extras/ww8import/ww8import.cxx  |   13 +++++++++++++
 sw/source/ui/uno/swdetect.cxx         |   22 ++++++++++++++++++++++
 3 files changed, 35 insertions(+)

New commits:
commit 65559252f138aada7a55d3c5fe0a932a222d13e0
Author:     Tor Lillqvist <tml at collabora.com>
AuthorDate: Tue Feb 19 11:03:20 2019 +0200
Commit:     Tor Lillqvist <tml at collabora.com>
CommitDate: Tue Feb 19 18:02:30 2019 +0100

    tdf#110987: Don't mis-detect .doc files as .dot
    
    Also add a unit test for that.
    
    Change-Id: I86c195cebbe12b2bdf498954956db882f6f0d12b
    Reviewed-on: https://gerrit.libreoffice.org/68005
    Tested-by: Jenkins
    Reviewed-by: Tor Lillqvist <tml at collabora.com>

diff --git a/sw/qa/extras/ww8import/data/tdf110987 b/sw/qa/extras/ww8import/data/tdf110987
new file mode 100644
index 000000000000..16195c0e1579
Binary files /dev/null and b/sw/qa/extras/ww8import/data/tdf110987 differ
diff --git a/sw/qa/extras/ww8import/ww8import.cxx b/sw/qa/extras/ww8import/ww8import.cxx
index 9398645f1e16..41b4d34a5edf 100644
--- a/sw/qa/extras/ww8import/ww8import.cxx
+++ b/sw/qa/extras/ww8import/ww8import.cxx
@@ -17,6 +17,8 @@
 #include <editeng/boxitem.hxx>
 #include <editeng/lrspitem.hxx>
 #include <editeng/ulspitem.hxx>
+#include <sfx2/docfile.hxx>
+#include <sfx2/docfilt.hxx>
 
 class Test : public SwModelTestBase
 {
@@ -268,6 +270,17 @@ DECLARE_WW8IMPORT_TEST(testTdf122425_2, "tdf122425_2.doc")
     }
 }
 
+DECLARE_WW8IMPORT_TEST(testTdf110987, "tdf110987")
+{
+    // The input document is an empty .doc, but without file name
+    // extension. Check that it was loaded as a normal .doc document,
+    // and not a template.
+    SwXTextDocument* pTextDoc     = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+    CPPUNIT_ASSERT(pTextDoc);
+    OUString sFilterName = pTextDoc->GetDocShell()->GetMedium()->GetFilter()->GetFilterName();
+    CPPUNIT_ASSERT(sFilterName != "MS Word 97 Vorlage");
+}
+
 // tests should only be added to ww8IMPORT *if* they fail round-tripping in ww8EXPORT
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/ui/uno/swdetect.cxx b/sw/source/ui/uno/swdetect.cxx
index a87824640c4f..fffceefa2fef 100644
--- a/sw/source/ui/uno/swdetect.cxx
+++ b/sw/source/ui/uno/swdetect.cxx
@@ -95,7 +95,29 @@ OUString SAL_CALL SwFilterDetect::detect( Sequence< PropertyValue >& lDescriptor
             {
                 bIsDetected = aStorage->IsContained( "WordDocument" );
                 if ( bIsDetected && aTypeName.startsWith( "writer_MS_Word_97" ) )
+                {
                     bIsDetected = ( aStorage->IsContained("0Table") || aStorage->IsContained("1Table") );
+
+                    // If we are checking the template type, and the document is not a .dot, don't
+                    // mis-detect it.
+                    if ( bIsDetected && aTypeName == "writer_MS_Word_97_Vorlage" )
+                    {
+                        // Super ugly hack, but we don't want to use the whole WW8Fib thing here in
+                        // the swd library, apparently. We know (do we?) that the "aBits1" byte, as
+                        // the variable is called in WW8Fib::WW8Fib(SvStream&,sal_uInt8,sal_uInt32),
+                        // is at offset 10 in the WordDocument stream. The fDot bit is bit 0x01 of
+                        // that byte.
+                        tools::SvRef<SotStorageStream> xWordDocument = aStorage->OpenSotStream("WordDocument", StreamMode::STD_READ);
+                        xWordDocument->Seek( 10 );
+                        if ( xWordDocument->Tell() == 10 )
+                        {
+                            sal_uInt8 aBits1;
+                            xWordDocument->ReadUChar( aBits1 );
+                            // Check fDot bit
+                            bIsDetected = ((aBits1 & 0x01) == 0x01);
+                        }
+                    }
+                }
             }
         }
         catch (...)


More information about the Libreoffice-commits mailing list