summaryrefslogtreecommitdiff
path: root/testing/embedder_test.cpp
diff options
context:
space:
mode:
authorthestig <thestig@chromium.org>2016-06-27 09:47:59 -0700
committerCommit bot <commit-bot@chromium.org>2016-06-27 09:47:59 -0700
commitc08cd7abb2069b6056ec99c8ec5b87524e45df01 (patch)
treea1b919599cd5f3f23aeb9834aff5b6d21c7549ec /testing/embedder_test.cpp
parentdff03da3d403b72098d5d43ea90b03ed340de5ec (diff)
downloadpdfium-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.cpp39
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;
}