diff options
author | min7.choi <min7.choi@samsung.com> | 2017-07-20 18:55:45 +0900 |
---|---|---|
committer | min7.choi <min7.choi@samsung.com> | 2017-07-20 18:55:52 +0900 |
commit | fbdf8cfd11929495b4f6d2290a381fb2e932f7f3 (patch) | |
tree | 58253c2360783922648a76eeaec7a61c44cce7da | |
parent | 44da52a1827bf05a010b12f4bccfb370fe4e59c2 (diff) | |
download | nodejs-tizen_5.5_tv.tar.gz nodejs-tizen_5.5_tv.tar.bz2 nodejs-tizen_5.5_tv.zip |
deps: backport IsValid changes from 4e8736d in V8tizen_5.5.m2_releasetizen_4.0.m2_releasetizen_4.0.IoT.p2_releasetizen_4.0.IoT.p1_releasesubmit/tizen_5.5_mobile_hotfix/20201026.185107submit/tizen_5.5/20191031.000007submit/tizen_5.0/20181101.000007submit/tizen_4.0/20170828.100006submit/tizen_4.0/20170811.094300submit/tizen/20170720.105540accepted/tizen/unified/20170721.024603accepted/tizen/5.5/unified/mobile/hotfix/20201027.074323accepted/tizen/5.5/unified/20191031.011937accepted/tizen/5.0/unified/20181102.030536accepted/tizen/4.0/unified/20170828.222709accepted/tizen/4.0/unified/20170816.011835tizen_5.5_tvtizen_5.5_mobile_hotfixtizen_5.5tizen_5.0tizen_4.0accepted/tizen_unifiedaccepted/tizen_5.5_unified_mobile_hotfixaccepted/tizen_5.5_unifiedaccepted/tizen_5.0_unifiedaccepted/tizen_4.0_unified
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/6669
Change-Id: I488cde214e1b22df424e74d8ffaed91c119b56a5
Signed-off-by: min7.choi <min7.choi@samsung.com>
-rw-r--r-- | deps/v8/src/heap/incremental-marking.cc | 4 | ||||
-rw-r--r-- | deps/v8/src/heap/spaces-inl.h | 2 | ||||
-rw-r--r-- | deps/v8/src/heap/spaces.cc | 2 | ||||
-rw-r--r-- | deps/v8/src/heap/spaces.h | 4 | ||||
-rw-r--r-- | deps/v8/test/cctest/test-spaces.cc | 6 |
5 files changed, 9 insertions, 9 deletions
diff --git a/deps/v8/src/heap/incremental-marking.cc b/deps/v8/src/heap/incremental-marking.cc index 58eb0aa40..b2b796f42 100644 --- a/deps/v8/src/heap/incremental-marking.cc +++ b/deps/v8/src/heap/incremental-marking.cc @@ -364,7 +364,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(); } @@ -396,7 +396,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 c2c4d1269..d63ee635a 100644 --- a/deps/v8/src/heap/spaces-inl.h +++ b/deps/v8/src/heap/spaces-inl.h @@ -155,7 +155,7 @@ Page* Page::Initialize(Heap* heap, MemoryChunk* chunk, Executability executable, 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; } diff --git a/deps/v8/src/heap/spaces.cc b/deps/v8/src/heap/spaces.cc index 0806b2565..c0e109b61 100644 --- a/deps/v8/src/heap/spaces.cc +++ b/deps/v8/src/heap/spaces.cc @@ -2953,7 +2953,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 3461de3ef..e35c05757 100644 --- a/deps/v8/src/heap/spaces.h +++ b/deps/v8/src/heap/spaces.h @@ -278,9 +278,9 @@ class MemoryChunk { // Only works for addresses in pointer spaces, not data or code spaces. static inline MemoryChunk* FromAnyPointerAddress(Heap* heap, Address addr); - 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); } MemoryChunk* next_chunk() const { return reinterpret_cast<MemoryChunk*>(base::Acquire_Load(&next_chunk_)); diff --git a/deps/v8/test/cctest/test-spaces.cc b/deps/v8/test/cctest/test-spaces.cc index 3f5e43722..8ad9e869b 100644 --- a/deps/v8/test/cctest/test-spaces.cc +++ b/deps/v8/test/cctest/test-spaces.cc @@ -314,7 +314,7 @@ TEST(MemoryAllocator) { faked_space.AreaSize(), &faked_space, NOT_EXECUTABLE); first_page->InsertAfter(faked_space.anchor()->prev_page()); - CHECK(first_page->is_valid()); + CHECK(Page::IsValid(first_page)); CHECK(first_page->next_page() == faked_space.anchor()); total_pages++; @@ -325,7 +325,7 @@ TEST(MemoryAllocator) { // Again, we should get n or n - 1 pages. Page* other = memory_allocator->AllocatePage( faked_space.AreaSize(), &faked_space, NOT_EXECUTABLE); - CHECK(other->is_valid()); + CHECK(Page::IsValid(other)); total_pages++; other->InsertAfter(first_page); int page_count = 0; @@ -336,7 +336,7 @@ TEST(MemoryAllocator) { CHECK(total_pages == page_count); Page* second_page = first_page->next_page(); - CHECK(second_page->is_valid()); + CHECK(Page::IsValid(second_page)); memory_allocator->Free(first_page); memory_allocator->Free(second_page); memory_allocator->TearDown(); |