tdf#115863: libtest_filter_tiff: Add unittest

Change-Id: I4877005287181189c4210052ab57ada876ae2e90
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107926
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
diff --git a/filter/qa/cppunit/data/tiff/tdf115863.tif b/filter/qa/cppunit/data/tiff/tdf115863.tif
new file mode 100644
index 0000000..b5e2dd9
--- /dev/null
+++ b/filter/qa/cppunit/data/tiff/tdf115863.tif
Binary files differ
diff --git a/filter/qa/cppunit/filters-tiff-test.cxx b/filter/qa/cppunit/filters-tiff-test.cxx
index 8d8fba0..0dd5e4f 100644
--- a/filter/qa/cppunit/filters-tiff-test.cxx
+++ b/filter/qa/cppunit/filters-tiff-test.cxx
@@ -12,6 +12,7 @@
#include <vcl/FilterConfigItem.hxx>
#include <tools/stream.hxx>
#include <vcl/graph.hxx>
#include <vcl/graphicfilter.hxx>

extern "C"
{
@@ -35,13 +36,20 @@ public:
        const OUString &rURL, const OUString &,
        SfxFilterFlags, SotClipboardFormatId, unsigned int) override;

    OUString getUrl()
    {
        return m_directories.getURLFromSrc("/filter/qa/cppunit/data/tiff/");
    }

    /**
     * Ensure CVEs remain unbroken
     */
    void testCVEs();
    void testTdf115863();

    CPPUNIT_TEST_SUITE(TiffFilterTest);
    CPPUNIT_TEST(testCVEs);
    CPPUNIT_TEST(testTdf115863);
    CPPUNIT_TEST_SUITE_END();
};

@@ -57,7 +65,28 @@ bool TiffFilterTest::load(const OUString &,
void TiffFilterTest::testCVEs()
{
    testDir(OUString(),
        m_directories.getURLFromSrc("/filter/qa/cppunit/data/tiff/"));
        getUrl());
}

void TiffFilterTest::testTdf115863()
{
    OUString aURL = getUrl() + "tdf115863.tif";
    SvFileStream aFileStream(aURL, StreamMode::READ);
    Graphic aGraphic;
    GraphicFilter& rFilter = GraphicFilter::GetGraphicFilter();

    ErrCode bResult = rFilter.ImportGraphic(aGraphic, aURL, aFileStream);

    // Without the fix in place, this test would have failed with
    // - Expected: 0x0(Error Area:Io Class:NONE Code:0)
    // - Actual  : 0x8203(Error Area:Vcl Class:General Code:3)
    CPPUNIT_ASSERT_EQUAL(ERRCODE_NONE, bResult);

    Bitmap aBitmap = aGraphic.GetBitmapEx().GetBitmap();
    Size aSize = aBitmap.GetSizePixel();
    CPPUNIT_ASSERT_EQUAL(tools::Long(528), aSize.Width());
    CPPUNIT_ASSERT_EQUAL(tools::Long(618), aSize.Height());

}

CPPUNIT_TEST_SUITE_REGISTRATION(TiffFilterTest);