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

Unified Diff: third_party/WebKit/Source/bindings/scripts/v8_methods.py

Issue 1526183004: Prevent SharedArrayBuffer views from being used in bindings (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: some tests 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/bindings/scripts/v8_methods.py
diff --git a/third_party/WebKit/Source/bindings/scripts/v8_methods.py b/third_party/WebKit/Source/bindings/scripts/v8_methods.py
index ee7fb6cea54892b554a9786332e45ecb1e015725..a029cc38deb0880e7042cdd24ace14039be77eac 100644
--- a/third_party/WebKit/Source/bindings/scripts/v8_methods.py
+++ b/third_party/WebKit/Source/bindings/scripts/v8_methods.py
@@ -234,6 +234,30 @@ def argument_context(interface, method, argument, index, is_visible=True):
this_cpp_value = cpp_value(interface, method, index)
is_variadic_wrapper_type = argument.is_variadic and idl_type.is_wrapper_type
+ # ArrayBufferViews that contain SharedArrayBuffers are not allowed, in
+ # general. These conditions check various patterns that occur in the IDL
+ # files. has_array_buffer_view is a catch-all; if a new method is added
+ # which does not match any specified, it will raise an exception.
+ is_array_buffer_view = idl_type.is_array_buffer_view
+ is_flexible_array_buffer_view = (
+ 'FlexibleArrayBufferView' in extended_attributes)
+ is_union_with_abv = (
+ idl_type.is_union_type and
+ any(member_type.is_array_buffer_view
+ for member_type in idl_type.member_types))
+ is_sequence_of_union_with_abv = (
+ idl_type.is_array_or_sequence_type and
+ idl_type.element_type.is_union_type and
+ any(member_type.is_array_buffer_view
+ for member_type in idl_type.element_type.member_types))
+ has_array_buffer_view = any(t.is_array_buffer_view
+ for t in idl_type.idl_types())
+
+ if has_array_buffer_view and not (
+ is_array_buffer_view or is_union_with_abv or
+ is_sequence_of_union_with_abv):
+ raise Exception('ArrayBufferView in argument with unsupported pattern.')
+
# [LegacyInterfaceTypeChecking]
has_type_checking_interface = (
not is_legacy_interface_type_checking(interface, method) and
@@ -261,13 +285,17 @@ def argument_context(interface, method, argument, index, is_visible=True):
'idl_type': idl_type.base_type,
'idl_type_object': idl_type,
'index': index,
+ 'is_array_buffer_view': is_array_buffer_view,
'is_callback_function': idl_type.is_callback_function,
'is_callback_interface': idl_type.is_callback_interface,
# FIXME: Remove generic 'Dictionary' special-casing
'is_dictionary': idl_type.is_dictionary or idl_type.base_type == 'Dictionary',
'is_explicit_nullable': idl_type.is_explicit_nullable,
+ 'is_flexible_array_buffer_view': is_flexible_array_buffer_view,
'is_nullable': idl_type.is_nullable,
'is_optional': argument.is_optional,
+ 'is_sequence_of_union_with_array_buffer_view': is_sequence_of_union_with_abv,
+ 'is_union_with_array_buffer_view': is_union_with_abv,
'is_variadic': argument.is_variadic,
'is_variadic_wrapper_type': is_variadic_wrapper_type,
'is_wrapper_type': idl_type.is_wrapper_type,

Powered by Google App Engine
This is Rietveld 408576698