diff options
-rwxr-xr-x | bin/oss-fuzz-build.sh | 26 | ||||
-rw-r--r-- | vcl/workben/commonfuzzer.hxx | 19 | ||||
-rw-r--r-- | vcl/workben/sftfuzzer.options | 2 |
3 files changed, 34 insertions, 13 deletions
diff --git a/bin/oss-fuzz-build.sh b/bin/oss-fuzz-build.sh index 99e90c937bb4..08330daffe2b 100755 --- a/bin/oss-fuzz-build.sh +++ b/bin/oss-fuzz-build.sh @@ -20,15 +20,25 @@ export ASAN_OPTIONS="detect_leaks=0" make fuzzers -#some minimal fonts required -cp $SRC/libreoffice/extras/source/truetype/symbol/opens___.ttf instdir/share/fonts/truetype/Liberation* $OUT -#minimal runtime requirements -rm -rf $OUT/services $OUT/types $OUT/*rdb -mkdir $OUT/services pushd instdir/program -cp -r *fuzzer unorc fundamentalrc types.rdb types $OUT -head -c -14 services.rdb > $OUT/services.rdb -tail -c +85 ./services/services.rdb >> $OUT/services.rdb +head -c -14 services.rdb > templateservices.rdb +tail -c +85 ./services/services.rdb >> templateservices.rdb +for a in *fuzzer; do + #some minimal fonts required + cp $a $OUT + mkdir -p $OUT/$a.fonts + cp $SRC/libreoffice/extras/source/truetype/symbol/opens___.ttf ../share/fonts/truetype/Liberation* $OUT/$a.fonts + #minimal runtime requirements + cp templateservices.rdb $OUT/$a.services.rdb + cp types.rdb $OUT/$a.types.rdb + cp types/offapi.rdb $OUT/$a.moretypes.rdb + cat > $OUT/$a.unorc << EOF +[Bootstrap] +URE_INTERNAL_LIB_DIR=\${ORIGIN} +UNO_TYPES=\${ORIGIN}/$a.types.rdb \${ORIGIN}/$a.moretypes.rdb +UNO_SERVICES=\${ORIGIN}/$a.services.rdb +EOF +done popd #starting corpuses diff --git a/vcl/workben/commonfuzzer.hxx b/vcl/workben/commonfuzzer.hxx index cc4830fa5990..05d35a4e1532 100644 --- a/vcl/workben/commonfuzzer.hxx +++ b/vcl/workben/commonfuzzer.hxx @@ -49,17 +49,25 @@ namespace return uri; } + OUString getExecutableName() + { + OUString uri; + if (osl_getExecutableFile(&uri.pData) != osl_Process_E_None) { + abort(); + } + return uri.copy(uri.lastIndexOf('/') + 1); + } + void setFontConfigConf(const OUString &execdir) { osl::File aFontConfig("file:///tmp/wmffuzzerfonts.conf"); if (aFontConfig.open(osl_File_OpenFlag_Create | osl_File_OpenFlag_Write) == osl::File::E_None) { - OUString path; - osl::FileBase::getSystemPathFromFileURL(execdir, path); - OString sFontDir = OUStringToOString(path, osl_getThreadTextEncoding()); + OUString sExecDir; + osl::FileBase::getSystemPathFromFileURL(execdir, sExecDir); rtl::OStringBuffer aBuffer("<?xml version=\"1.0\"?>\n<fontconfig><dir>"); - aBuffer.append(sFontDir); + aBuffer.append(OUStringToOString(sExecDir + getExecutableName() + ".fonts", osl_getThreadTextEncoding()); aBuffer.append("</dir><cachedir>/tmp/cache/fontconfig</cachedir></fontconfig>"); rtl::OString aConf = aBuffer.makeStringAndClear(); sal_uInt64 aBytesWritten; @@ -104,7 +112,8 @@ void CommonInitialize(int *argc, char ***argv) tools::extendApplicationEnvironment(); - Reference< XComponentContext > xContext = defaultBootstrap_InitialComponentContext(); + Reference< XComponentContext > xContext = + defaultBootstrap_InitialComponentContext(sExecDir + getExecutableName() + ".unorc"); Reference< XMultiServiceFactory > xServiceManager( xContext->getServiceManager(), UNO_QUERY ); if( !xServiceManager.is() ) Application::Abort( "Failed to bootstrap" ); diff --git a/vcl/workben/sftfuzzer.options b/vcl/workben/sftfuzzer.options new file mode 100644 index 000000000000..678d526b1ea9 --- /dev/null +++ b/vcl/workben/sftfuzzer.options @@ -0,0 +1,2 @@ +[libfuzzer] +max_len = 65536 |