Add --no-system-fonts to pdfium_test on Mac and Linux. Add a new option on supported platforms to avoid using system fonts. This forces pdfium_test to only use built-in fonts, which is useful for simulating hermetic environments. BUG=pdfium:1285 Change-Id: Ia8c3ca58aab664c0b1a5d5a94f6488a47273ddbe Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/53631 Commit-Queue: Lei Zhang <thestig@chromium.org> Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/samples/pdfium_test.cc b/samples/pdfium_test.cc index a97c32e..1accd6e 100644 --- a/samples/pdfium_test.cc +++ b/samples/pdfium_test.cc
@@ -112,7 +112,10 @@ bool md5 = false; #ifdef ENABLE_CALLGRIND bool callgrind_delimiters = false; -#endif // ENABLE_CALLGRIND +#endif +#if defined(__APPLE__) || (defined(__linux__) && !defined(__ANDROID__)) + bool linux_no_system_fonts = false; +#endif OutputFormat output_format = OUTPUT_NONE; std::string scale_factor_as_string; std::string exe_path; @@ -140,6 +143,22 @@ #endif // WORDEXP_AVAILABLE } +Optional<const char*> GetCustomFontPath(const Options& options) { +#if defined(__APPLE__) || (defined(__linux__) && !defined(__ANDROID__)) + // Set custom font path to an empty path. This avoids the fallback to default + // font paths. + if (options.linux_no_system_fonts) + return nullptr; +#endif + + // No custom font path. Use default. + if (options.font_directory.empty()) + return pdfium::nullopt; + + // Set custom font path to |options.font_directory|. + return options.font_directory.c_str(); +} + struct FPDF_FORMFILLINFO_PDFiumTest final : public FPDF_FORMFILLINFO { // Hold a map of the currently loaded pages in order to avoid them // to get loaded twice. @@ -338,7 +357,11 @@ #ifdef ENABLE_CALLGRIND } else if (cur_arg == "--callgrind-delim") { options->callgrind_delimiters = true; -#endif // ENABLE_CALLGRIND +#endif +#if defined(__APPLE__) || (defined(__linux__) && !defined(__ANDROID__)) + } else if (cur_arg == "--no-system-fonts") { + options->linux_no_system_fonts = true; +#endif } else if (cur_arg == "--ppm") { if (options->output_format != OUTPUT_NONE) { fprintf(stderr, "Duplicate or conflicting --ppm argument\n"); @@ -891,6 +914,9 @@ " --callgrind-delim - delimit interesting section when using " "callgrind\n" #endif +#if defined(__APPLE__) || (defined(__linux__) && !defined(__ANDROID__)) + " --no-system-fonts - do not use system fonts, overrides --font-dir\n" +#endif " --bin-dir=<path> - override path to v8 external data\n" " --font-dir=<path> - override path to external fonts\n" " --scale=<number> - scale output size by number (e.g. 0.5)\n" @@ -956,12 +982,13 @@ config.m_pIsolate = nullptr; config.m_v8EmbedderSlot = 0; - const char* path_array[2]; - if (!options.font_directory.empty()) { - path_array[0] = options.font_directory.c_str(); - path_array[1] = nullptr; + const char* path_array[2] = {nullptr, nullptr}; + Optional<const char*> custom_font_path = GetCustomFontPath(options); + if (custom_font_path.has_value()) { + path_array[0] = custom_font_path.value(); config.m_pUserFontPaths = path_array; } + FPDF_InitLibraryWithConfig(&config); UNSUPPORT_INFO unsupported_info = {};