Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(52)

Side by Side Diff: test/unittests/value-serializer-unittest.cc

Issue 2645673002: ValueSerializer: Fail decode if no memory is available when decoding ArrayBuffer. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/value-serializer.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/value-serializer.h" 5 #include "src/value-serializer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "include/v8.h" 10 #include "include/v8.h"
(...skipping 1726 matching lines...) Expand 10 before | Expand all | Expand 10 after
1737 EXPECT_TRUE( 1737 EXPECT_TRUE(
1738 EvaluateScriptForResultBool("result.a instanceof ArrayBuffer")); 1738 EvaluateScriptForResultBool("result.a instanceof ArrayBuffer"));
1739 EXPECT_TRUE(EvaluateScriptForResultBool("result.a === result.b")); 1739 EXPECT_TRUE(EvaluateScriptForResultBool("result.a === result.b"));
1740 }); 1740 });
1741 } 1741 }
1742 1742
1743 TEST_F(ValueSerializerTest, DecodeInvalidArrayBuffer) { 1743 TEST_F(ValueSerializerTest, DecodeInvalidArrayBuffer) {
1744 InvalidDecodeTest({0xff, 0x09, 0x42, 0xff, 0xff, 0x00}); 1744 InvalidDecodeTest({0xff, 0x09, 0x42, 0xff, 0xff, 0x00});
1745 } 1745 }
1746 1746
1747 // An array buffer allocator that never has available memory.
1748 class OOMArrayBufferAllocator : public ArrayBuffer::Allocator {
1749 public:
1750 void* Allocate(size_t) override { return nullptr; }
1751 void* AllocateUninitialized(size_t) override { return nullptr; }
1752 void Free(void*, size_t) override {}
1753 };
1754
1755 TEST_F(ValueSerializerTest, DecodeArrayBufferOOM) {
1756 // This test uses less of the harness, because it has to customize the
1757 // isolate.
1758 OOMArrayBufferAllocator allocator;
1759 Isolate::CreateParams params;
1760 params.array_buffer_allocator = &allocator;
1761 Isolate* isolate = Isolate::New(params);
1762 Isolate::Scope isolate_scope(isolate);
1763 HandleScope handle_scope(isolate);
1764 Local<Context> context = Context::New(isolate);
1765 Context::Scope context_scope(context);
1766 TryCatch try_catch(isolate);
1767
1768 const std::vector<uint8_t> data = {0xff, 0x09, 0x3f, 0x00, 0x42,
1769 0x03, 0x00, 0x80, 0xff, 0x00};
1770 ValueDeserializer deserializer(isolate, &data[0],
1771 static_cast<int>(data.size()), nullptr);
1772 deserializer.SetSupportsLegacyWireFormat(true);
1773 ASSERT_TRUE(deserializer.ReadHeader(context).FromMaybe(false));
1774 ASSERT_FALSE(try_catch.HasCaught());
1775 EXPECT_TRUE(deserializer.ReadValue(context).IsEmpty());
1776 EXPECT_TRUE(try_catch.HasCaught());
1777 }
1778
1747 // Includes an ArrayBuffer wrapper marked for transfer from the serialization 1779 // Includes an ArrayBuffer wrapper marked for transfer from the serialization
1748 // context to the deserialization context. 1780 // context to the deserialization context.
1749 class ValueSerializerTestWithArrayBufferTransfer : public ValueSerializerTest { 1781 class ValueSerializerTestWithArrayBufferTransfer : public ValueSerializerTest {
1750 protected: 1782 protected:
1751 static const size_t kTestByteLength = 4; 1783 static const size_t kTestByteLength = 4;
1752 1784
1753 ValueSerializerTestWithArrayBufferTransfer() { 1785 ValueSerializerTestWithArrayBufferTransfer() {
1754 { 1786 {
1755 Context::Scope scope(serialization_context()); 1787 Context::Scope scope(serialization_context());
1756 input_buffer_ = ArrayBuffer::New(isolate(), nullptr, 0); 1788 input_buffer_ = ArrayBuffer::New(isolate(), nullptr, 0);
(...skipping 809 matching lines...) Expand 10 before | Expand all | Expand 10 after
2566 InvalidDecodeTest(raw); 2598 InvalidDecodeTest(raw);
2567 } 2599 }
2568 2600
2569 TEST_F(ValueSerializerTestWithWasm, DecodeWasmModuleWithInvalidDataLength) { 2601 TEST_F(ValueSerializerTestWithWasm, DecodeWasmModuleWithInvalidDataLength) {
2570 InvalidDecodeTest({0xff, 0x09, 0x3f, 0x00, 0x57, 0x79, 0x7f, 0x00}); 2602 InvalidDecodeTest({0xff, 0x09, 0x3f, 0x00, 0x57, 0x79, 0x7f, 0x00});
2571 InvalidDecodeTest({0xff, 0x09, 0x3f, 0x00, 0x57, 0x79, 0x00, 0x7f}); 2603 InvalidDecodeTest({0xff, 0x09, 0x3f, 0x00, 0x57, 0x79, 0x00, 0x7f});
2572 } 2604 }
2573 2605
2574 } // namespace 2606 } // namespace
2575 } // namespace v8 2607 } // namespace v8
OLDNEW
« no previous file with comments | « src/value-serializer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698