diff options
author | Caolán McNamara <caolanm@redhat.com> | 2022-02-25 15:46:16 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2022-02-25 20:56:05 +0100 |
commit | 237a5e5121a6f12981eb6e4c5a138fc8cfa1c3cf (patch) | |
tree | 1f85552fb26c442acb0e34d66356440beb915cc6 /vcl | |
parent | cccd241391438a381311cd7aeccfdb5ad52ee906 (diff) |
do more work in sftfuzzer
Change-Id: I8a0ae472988f9166dc35eea561a9d5d7084563e6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130539
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/inc/fontsubset.hxx | 2 | ||||
-rw-r--r-- | vcl/source/font/font.cxx | 1 | ||||
-rw-r--r-- | vcl/source/fontsubset/sft.cxx | 31 | ||||
-rw-r--r-- | vcl/workben/fftester.cxx | 3 | ||||
-rw-r--r-- | vcl/workben/sftfuzzer.cxx | 5 |
5 files changed, 38 insertions, 4 deletions
diff --git a/vcl/inc/fontsubset.hxx b/vcl/inc/fontsubset.hxx index 1a4c7b80b118..2db54387034e 100644 --- a/vcl/inc/fontsubset.hxx +++ b/vcl/inc/fontsubset.hxx @@ -89,6 +89,8 @@ private: static bool CreateFontSubsetFromType1( const sal_Int32* pOutGlyphWidths ); }; +int VCL_DLLPUBLIC TestFontSubset(const void* data, sal_uInt32 size); + #endif // INCLUDED_VCL_INC_FONTSUBSET_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/font/font.cxx b/vcl/source/font/font.cxx index 789273aaf40b..16678dd61ac7 100644 --- a/vcl/source/font/font.cxx +++ b/vcl/source/font/font.cxx @@ -30,6 +30,7 @@ #include <impfont.hxx> #include <fontattributes.hxx> +#include <fontsubset.hxx> #include <sft.hxx> #include <algorithm> diff --git a/vcl/source/fontsubset/sft.cxx b/vcl/source/fontsubset/sft.cxx index bfd8c1d5e8e8..999cf07de1d2 100644 --- a/vcl/source/fontsubset/sft.cxx +++ b/vcl/source/fontsubset/sft.cxx @@ -43,6 +43,7 @@ #include <sal/log.hxx> #include <o3tl/safeint.hxx> #include <osl/endian.h> +#include <fontsubset.hxx> #include <algorithm> namespace vcl @@ -2279,4 +2280,34 @@ bool getTTCoverage( } // namespace vcl +int TestFontSubset(const void* data, sal_uInt32 size) +{ + int nResult = -1; + vcl::TrueTypeFont* pTTF = nullptr; + if (OpenTTFontBuffer(data, size, 0, &pTTF) == vcl::SFErrCodes::Ok) + { + vcl::TTGlobalFontInfo aInfo; + GetTTGlobalFontInfo(pTTF, &aInfo); + + sal_uInt16 aGlyphIds[ 256 ] = {}; + sal_uInt8 aEncoding[ 256 ] = {}; + + for (sal_uInt16 c = 32; c < 256; ++c) + { + aEncoding[c] = c; + aGlyphIds[c] = c - 31; + } + + CreateTTFromTTGlyphs(pTTF, nullptr, aGlyphIds, aEncoding, 256); + + + // cleanup + CloseTTFont( pTTF ); + // success + nResult = 0; + } + + return nResult; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/workben/fftester.cxx b/vcl/workben/fftester.cxx index d69c07708841..3c6645dbb89f 100644 --- a/vcl/workben/fftester.cxx +++ b/vcl/workben/fftester.cxx @@ -69,6 +69,7 @@ #include <rtl/bootstrap.hxx> #include <tools/stream.hxx> #include <vcl/gdimtf.hxx> +#include <fontsubset.hxx> #include "../source/filter/igif/gifread.hxx" #include "../source/filter/ixbm/xbmread.hxx" @@ -525,7 +526,7 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) SvFileStream aFileStream(out, StreamMode::READ); std::vector<sal_uInt8> aData(aFileStream.remainingSize()); aFileStream.ReadBytes(aData.data(), aData.size()); - (void)vcl::Font::identifyFont(aData.data(), aData.size()); + ret = TestFontSubset(aData.data(), aData.size()); } #endif diff --git a/vcl/workben/sftfuzzer.cxx b/vcl/workben/sftfuzzer.cxx index fc951ddc1468..f0a4a9a8cadf 100644 --- a/vcl/workben/sftfuzzer.cxx +++ b/vcl/workben/sftfuzzer.cxx @@ -7,7 +7,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include <vcl/font.hxx> +#include <fontsubset.hxx> #include "commonfuzzer.hxx" #include <config_features.h> @@ -37,8 +37,7 @@ extern "C" int LLVMFuzzerInitialize(int* argc, char*** argv) extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { - (void)vcl::Font::identifyFont(data, size); - return 0; + return TestFontSubset(data, size); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |