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

Side by Side Diff: src/value-serializer.cc

Issue 2495393002: ValueSerializer: Don't throw an exception after SetPropertiesFromKeyValuePairs fails. (Closed)
Patch Set: Created 4 years, 1 month 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 | « no previous file | 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 <type_traits> 7 #include <type_traits>
8 8
9 #include "src/base/logging.h" 9 #include "src/base/logging.h"
10 #include "src/conversions.h" 10 #include "src/conversions.h"
(...skipping 1779 matching lines...) Expand 10 before | Expand all | Expand 10 after
1790 } 1790 }
1791 1791
1792 size_t begin_properties = 1792 size_t begin_properties =
1793 stack.size() - 2 * static_cast<size_t>(num_properties); 1793 stack.size() - 2 * static_cast<size_t>(num_properties);
1794 Handle<JSObject> js_object = isolate_->factory()->NewJSObject( 1794 Handle<JSObject> js_object = isolate_->factory()->NewJSObject(
1795 isolate_->object_function(), pretenure_); 1795 isolate_->object_function(), pretenure_);
1796 if (num_properties && 1796 if (num_properties &&
1797 !SetPropertiesFromKeyValuePairs( 1797 !SetPropertiesFromKeyValuePairs(
1798 isolate_, js_object, &stack[begin_properties], num_properties) 1798 isolate_, js_object, &stack[begin_properties], num_properties)
1799 .FromMaybe(false)) { 1799 .FromMaybe(false)) {
1800 isolate_->Throw(*isolate_->factory()->NewError( 1800 DCHECK(isolate_->has_pending_exception());
1801 MessageTemplate::kDataCloneDeserializationError));
1802 return MaybeHandle<Object>(); 1801 return MaybeHandle<Object>();
1803 } 1802 }
1804 1803
1805 stack.resize(begin_properties); 1804 stack.resize(begin_properties);
1806 new_object = js_object; 1805 new_object = js_object;
1807 break; 1806 break;
1808 } 1807 }
1809 case SerializationTag::kEndSparseJSArray: { 1808 case SerializationTag::kEndSparseJSArray: {
1810 ConsumeTag(SerializationTag::kEndSparseJSArray); 1809 ConsumeTag(SerializationTag::kEndSparseJSArray);
1811 1810
(...skipping 10 matching lines...) Expand all
1822 1821
1823 Handle<JSArray> js_array = isolate_->factory()->NewJSArray( 1822 Handle<JSArray> js_array = isolate_->factory()->NewJSArray(
1824 0, TERMINAL_FAST_ELEMENTS_KIND, pretenure_); 1823 0, TERMINAL_FAST_ELEMENTS_KIND, pretenure_);
1825 JSArray::SetLength(js_array, length); 1824 JSArray::SetLength(js_array, length);
1826 size_t begin_properties = 1825 size_t begin_properties =
1827 stack.size() - 2 * static_cast<size_t>(num_properties); 1826 stack.size() - 2 * static_cast<size_t>(num_properties);
1828 if (num_properties && 1827 if (num_properties &&
1829 !SetPropertiesFromKeyValuePairs( 1828 !SetPropertiesFromKeyValuePairs(
1830 isolate_, js_array, &stack[begin_properties], num_properties) 1829 isolate_, js_array, &stack[begin_properties], num_properties)
1831 .FromMaybe(false)) { 1830 .FromMaybe(false)) {
1832 isolate_->Throw(*isolate_->factory()->NewError( 1831 DCHECK(isolate_->has_pending_exception());
1833 MessageTemplate::kDataCloneDeserializationError));
1834 return MaybeHandle<Object>(); 1832 return MaybeHandle<Object>();
1835 } 1833 }
1836 1834
1837 stack.resize(begin_properties); 1835 stack.resize(begin_properties);
1838 new_object = js_array; 1836 new_object = js_array;
1839 break; 1837 break;
1840 } 1838 }
1841 case SerializationTag::kEndDenseJSArray: { 1839 case SerializationTag::kEndDenseJSArray: {
1842 // This was already broken in Chromium, and apparently wasn't missed. 1840 // This was already broken in Chromium, and apparently wasn't missed.
1843 isolate_->Throw(*isolate_->factory()->NewError( 1841 isolate_->Throw(*isolate_->factory()->NewError(
(...skipping 18 matching lines...) Expand all
1862 if (stack.size() != 1) { 1860 if (stack.size() != 1) {
1863 isolate_->Throw(*isolate_->factory()->NewError( 1861 isolate_->Throw(*isolate_->factory()->NewError(
1864 MessageTemplate::kDataCloneDeserializationError)); 1862 MessageTemplate::kDataCloneDeserializationError));
1865 return MaybeHandle<Object>(); 1863 return MaybeHandle<Object>();
1866 } 1864 }
1867 return scope.CloseAndEscape(stack[0]); 1865 return scope.CloseAndEscape(stack[0]);
1868 } 1866 }
1869 1867
1870 } // namespace internal 1868 } // namespace internal
1871 } // namespace v8 1869 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698