summaryrefslogtreecommitdiff
path: root/deps/v8/src/heap
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2016-05-03 11:27:09 +0200
committerMichaël Zasso <targos@protonmail.com>2016-06-29 09:07:46 +0200
commit6dfa5339e318bdbb7b8fd030f3e3234188bff4ab (patch)
tree8ac2b5a04d54fbfce57419f883a4441f5899f46a /deps/v8/src/heap
parent35ee1d17d6f84a28ac99a744492bb6c1e1d20e1d (diff)
downloadandroid-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.cc4
-rw-r--r--deps/v8/src/heap/spaces-inl.h4
-rw-r--r--deps/v8/src/heap/spaces.cc2
-rw-r--r--deps/v8/src/heap/spaces.h4
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_; }