diff options
author | Michaël Zasso <targos@protonmail.com> | 2016-05-03 11:27:09 +0200 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2016-06-29 09:07:46 +0200 |
commit | 6dfa5339e318bdbb7b8fd030f3e3234188bff4ab (patch) | |
tree | 8ac2b5a04d54fbfce57419f883a4441f5899f46a /deps/v8/src/heap | |
parent | 35ee1d17d6f84a28ac99a744492bb6c1e1d20e1d (diff) | |
download | android-node-v8-6dfa5339e318bdbb7b8fd030f3e3234188bff4ab.tar.gz android-node-v8-6dfa5339e318bdbb7b8fd030f3e3234188bff4ab.tar.bz2 android-node-v8-6dfa5339e318bdbb7b8fd030f3e3234188bff4ab.zip |
deps: backport IsValid changes from 4e8736d in V8
V8 erroneously did null pointer checks on `this`.
It can lead to a SIGSEGV crash if node is compiled with GCC 6.
Backport relevant changes from [1] that fix this issue.
[1]: https://codereview.chromium.org/1900423002
Fixes: https://github.com/nodejs/node/issues/6272
PR-URL: https://github.com/nodejs/node/pull/6544
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com>
Diffstat (limited to 'deps/v8/src/heap')
-rw-r--r-- | deps/v8/src/heap/incremental-marking.cc | 4 | ||||
-rw-r--r-- | deps/v8/src/heap/spaces-inl.h | 4 | ||||
-rw-r--r-- | deps/v8/src/heap/spaces.cc | 2 | ||||
-rw-r--r-- | deps/v8/src/heap/spaces.h | 4 |
4 files changed, 7 insertions, 7 deletions
diff --git a/deps/v8/src/heap/incremental-marking.cc b/deps/v8/src/heap/incremental-marking.cc index 376e8488ce..46f95cc181 100644 --- a/deps/v8/src/heap/incremental-marking.cc +++ b/deps/v8/src/heap/incremental-marking.cc @@ -366,7 +366,7 @@ void IncrementalMarking::DeactivateIncrementalWriteBarrier() { DeactivateIncrementalWriteBarrierForSpace(heap_->new_space()); LargePage* lop = heap_->lo_space()->first_page(); - while (lop->is_valid()) { + while (LargePage::IsValid(lop)) { SetOldSpacePageFlags(lop, false, false); lop = lop->next_page(); } @@ -398,7 +398,7 @@ void IncrementalMarking::ActivateIncrementalWriteBarrier() { ActivateIncrementalWriteBarrier(heap_->new_space()); LargePage* lop = heap_->lo_space()->first_page(); - while (lop->is_valid()) { + while (LargePage::IsValid(lop)) { SetOldSpacePageFlags(lop, true, is_compacting_); lop = lop->next_page(); } diff --git a/deps/v8/src/heap/spaces-inl.h b/deps/v8/src/heap/spaces-inl.h index 135498f69d..c16c9f00a4 100644 --- a/deps/v8/src/heap/spaces-inl.h +++ b/deps/v8/src/heap/spaces-inl.h @@ -325,14 +325,14 @@ void MemoryChunk::IncrementLiveBytesFromMutator(HeapObject* object, int by) { bool PagedSpace::Contains(Address addr) { Page* p = Page::FromAddress(addr); - if (!p->is_valid()) return false; + if (!Page::IsValid(p)) return false; return p->owner() == this; } bool PagedSpace::Contains(Object* o) { if (!o->IsHeapObject()) return false; Page* p = Page::FromAddress(HeapObject::cast(o)->address()); - if (!p->is_valid()) return false; + if (!Page::IsValid(p)) return false; return p->owner() == this; } diff --git a/deps/v8/src/heap/spaces.cc b/deps/v8/src/heap/spaces.cc index a0a37523b2..8a7fd1a14f 100644 --- a/deps/v8/src/heap/spaces.cc +++ b/deps/v8/src/heap/spaces.cc @@ -2977,7 +2977,7 @@ LargePage* LargeObjectSpace::FindPage(Address a) { if (e != NULL) { DCHECK(e->value != NULL); LargePage* page = reinterpret_cast<LargePage*>(e->value); - DCHECK(page->is_valid()); + DCHECK(LargePage::IsValid(page)); if (page->Contains(a)) { return page; } diff --git a/deps/v8/src/heap/spaces.h b/deps/v8/src/heap/spaces.h index 93a81cc933..49a43dc83d 100644 --- a/deps/v8/src/heap/spaces.h +++ b/deps/v8/src/heap/spaces.h @@ -558,9 +558,9 @@ class MemoryChunk { !chunk->high_water_mark_.TrySetValue(old_mark, new_mark)); } - Address address() { return reinterpret_cast<Address>(this); } + static bool IsValid(MemoryChunk* chunk) { return chunk != nullptr; } - bool is_valid() { return address() != NULL; } + Address address() { return reinterpret_cast<Address>(this); } base::Mutex* mutex() { return mutex_; } |