From 247a23c684151d93fa9c5b9b67e36e4d68389bf4 Mon Sep 17 00:00:00 2001 From: jBarz Date: Thu, 29 Dec 2016 16:53:34 -0500 Subject: [PATCH] deps: backport 224d376 from V8 upstream Orignial commit message: Abort in delete operators that shouldn't be called. Section 3.2 of the C++ standard states that destructor definitions implicitly "use" operator delete functions. Therefore, these operator delete functions must be defined even if they are never called by user code explicitly. http://www.open-std.org/JTC1/SC22/WG21/docs/ cwg_defects.html#261 gcc allows them to remain as empty definitions. However, not all compilers allow this. (e.g. xlc on zOS). This pull request creates definitions which if ever called, result in an abort. R=danno@chromium.org,jochen@chromium.org BUG= LOG=N Review-Url: https://codereview.chromium.org/2588433002 Cr-Commit-Position: refs/heads/master@{#41981} --- deps/v8/src/api.cc | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/deps/v8/src/api.cc b/deps/v8/src/api.cc index bf351548430a21..5b4cc7d8241cf0 100644 --- a/deps/v8/src/api.cc +++ b/deps/v8/src/api.cc @@ -789,6 +789,12 @@ HandleScope::~HandleScope() { i::HandleScope::CloseScope(isolate_, prev_next_, prev_limit_); } +V8_NORETURN void* HandleScope::operator new(size_t) { + base::OS::Abort(); + abort(); +} + +void HandleScope::operator delete(void*, size_t) { base::OS::Abort(); } int HandleScope::NumberOfHandles(Isolate* isolate) { return i::HandleScope::NumberOfHandles( @@ -828,6 +834,12 @@ i::Object** EscapableHandleScope::Escape(i::Object** escape_value) { return escape_slot_; } +V8_NORETURN void* EscapableHandleScope::operator new(size_t) { + base::OS::Abort(); + abort(); +} + +void EscapableHandleScope::operator delete(void*, size_t) { base::OS::Abort(); } SealHandleScope::SealHandleScope(Isolate* isolate) { i::Isolate* internal_isolate = reinterpret_cast(isolate); @@ -849,6 +861,12 @@ SealHandleScope::~SealHandleScope() { current->sealed_level = prev_sealed_level_; } +V8_NORETURN void* SealHandleScope::operator new(size_t) { + base::OS::Abort(); + abort(); +} + +void SealHandleScope::operator delete(void*, size_t) { base::OS::Abort(); } void Context::Enter() { i::Handle env = Utils::OpenHandle(this); @@ -2273,6 +2291,12 @@ v8::TryCatch::~TryCatch() { } } +V8_NORETURN void* v8::TryCatch::operator new(size_t) { + base::OS::Abort(); + abort(); +} + +void v8::TryCatch::operator delete(void*, size_t) { base::OS::Abort(); } bool v8::TryCatch::HasCaught() const { return !reinterpret_cast(exception_)->IsTheHole();