diff options
author | thestig <thestig@chromium.org> | 2016-06-27 09:47:59 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-06-27 09:47:59 -0700 |
commit | c08cd7abb2069b6056ec99c8ec5b87524e45df01 (patch) | |
tree | a1b919599cd5f3f23aeb9834aff5b6d21c7549ec /testing/embedder_test.cpp | |
parent | dff03da3d403b72098d5d43ea90b03ed340de5ec (diff) | |
download | pdfium-c08cd7abb2069b6056ec99c8ec5b87524e45df01.tar.xz |
Fix memory leaks with V8 startup data.
Review-Url: https://codereview.chromium.org/2068563002
Diffstat (limited to 'testing/embedder_test.cpp')
-rw-r--r-- | testing/embedder_test.cpp | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp index 9ef1e06dca..b1207fba82 100644 --- a/testing/embedder_test.cpp +++ b/testing/embedder_test.cpp @@ -25,7 +25,16 @@ #endif // PDF_ENABLE_V8 namespace { -const char* g_exe_path_ = nullptr; + +const char* g_exe_path = nullptr; + +#ifdef PDF_ENABLE_V8 +#ifdef V8_USE_EXTERNAL_STARTUP_DATA +v8::StartupData* g_v8_natives = nullptr; +v8::StartupData* g_v8_snapshot = nullptr; +#endif // V8_USE_EXTERNAL_STARTUP_DATA +#endif // PDF_ENABLE_V8 + } // namespace FPDF_BOOL Is_Data_Avail(FX_FILEAVAIL* pThis, size_t offset, size_t size) { @@ -50,10 +59,17 @@ EmbedderTest::EmbedderTest() #ifdef PDF_ENABLE_V8 #ifdef V8_USE_EXTERNAL_STARTUP_DATA - InitializeV8ForPDFium(g_exe_path_, std::string(), &natives_, &snapshot_, - &platform_); + if (g_v8_natives && g_v8_snapshot) { + InitializeV8ForPDFium(g_exe_path, std::string(), nullptr, nullptr, + &platform_); + } else { + g_v8_natives = new v8::StartupData; + g_v8_snapshot = new v8::StartupData; + InitializeV8ForPDFium(g_exe_path, std::string(), g_v8_natives, + g_v8_snapshot, &platform_); + } #else - InitializeV8ForPDFium(g_exe_path_, &platform_); + InitializeV8ForPDFium(g_exe_path, &platform_); #endif // V8_USE_EXTERNAL_STARTUP_DATA #endif // FPDF_ENABLE_V8 } @@ -320,8 +336,19 @@ FPDF_PAGE EmbedderTest::GetPageTrampoline(FPDF_FORMFILLINFO* info, // Can't use gtest-provided main since we need to stash the path to the // executable in order to find the external V8 binary data files. int main(int argc, char** argv) { - g_exe_path_ = argv[0]; + g_exe_path = argv[0]; testing::InitGoogleTest(&argc, argv); testing::InitGoogleMock(&argc, argv); - return RUN_ALL_TESTS(); + int ret_val = RUN_ALL_TESTS(); + +#ifdef PDF_ENABLE_V8 +#ifdef V8_USE_EXTERNAL_STARTUP_DATA + if (g_v8_natives) + free(const_cast<char*>(g_v8_natives->data)); + if (g_v8_snapshot) + free(const_cast<char*>(g_v8_snapshot->data)); +#endif // V8_USE_EXTERNAL_STARTUP_DATA +#endif // PDF_ENABLE_V8 + + return ret_val; } |