Passing a number as the pixel parameter to texImage2D() doesn't thrown an exception
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 20 Oct 2016 19:52:16 +0000 (19:52 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 20 Oct 2016 19:52:16 +0000 (19:52 +0000)
https://bugs.webkit.org/show_bug.cgi?id=163715

Reviewed by Darin Adler.

Source/WebCore:

Enable strict type checking for typed arrays in the bindings, similarly
do what we do for other wrapper types, as per Web IDL.

No new tests, updated existing tests.

* bindings/scripts/CodeGeneratorJS.pm:
(GenerateImplementation):
(GenerateParametersCheck):

LayoutTests:

Update existing tests now that we throw a TypeError when passing an unexpected
type for a parameter where we expect a typed array.

* fast/canvas/webgl/script-tests/texImageTest.js:
* fast/canvas/webgl/texImageTest-expected.txt:
* webgl/1.0.2/resources/webgl_test_files/conformance/textures/tex-image-with-invalid-data.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@207634 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/canvas/webgl/script-tests/texImageTest.js
LayoutTests/fast/canvas/webgl/texImageTest-expected.txt
LayoutTests/webgl/1.0.2/resources/webgl_test_files/conformance/textures/tex-image-with-invalid-data.html
Source/WebCore/ChangeLog
Source/WebCore/bindings/scripts/CodeGeneratorJS.pm

index 8788113..b7256f0 100644 (file)
@@ -1,3 +1,17 @@
+2016-10-20  Chris Dumez  <cdumez@apple.com>
+
+        Passing a number as the pixel parameter to texImage2D() doesn't thrown an exception
+        https://bugs.webkit.org/show_bug.cgi?id=163715
+
+        Reviewed by Darin Adler.
+
+        Update existing tests now that we throw a TypeError when passing an unexpected
+        type for a parameter where we expect a typed array.
+
+        * fast/canvas/webgl/script-tests/texImageTest.js:
+        * fast/canvas/webgl/texImageTest-expected.txt:
+        * webgl/1.0.2/resources/webgl_test_files/conformance/textures/tex-image-with-invalid-data.html:
+
 2016-10-20  Ryan Haddad  <ryanhaddad@apple.com>
 
         Marking media/modern-media-controls/media-controller/media-controller-resize.html as flaky.
index 8e9658f..c1a9d4e 100644 (file)
@@ -25,7 +25,7 @@ shouldBeUndefined("context.texImage2D(context.TEXTURE_2D, 0, context.RGBA, conte
 
 shouldThrow("context.texSubImage2D(context.TEXTURE_2D)");
 shouldBeUndefined("context.texSubImage2D(context.TEXTURE_2D, 0, 10, 20, 0, 0, context.RGBA, context.UNSIGNED_BYTE, null)");
-shouldBeUndefined("context.texSubImage2D(context.TEXTURE_2D, 0, 10, 20, 0, 0, context.RGBA, context.UNSIGNED_BYTE, 0)"); // We do not do strict type checking on ArrayBufferView.
+shouldThrow("context.texSubImage2D(context.TEXTURE_2D, 0, 10, 20, 0, 0, context.RGBA, context.UNSIGNED_BYTE, 0)");
 shouldThrow("context.texSubImage2D(context.TEXTURE_2D, 0, 10, 20, 0, context.UNSIGNED_BYTE, 0)");
 shouldBeUndefined("context.pixelStorei(context.UNPACK_FLIP_Y_WEBGL, false)");
 shouldBeUndefined("context.texSubImage2D(context.TEXTURE_2D, 0, 10, 20, context.RGBA, context.UNSIGNED_BYTE, imageData)");
index 2bee87e..f51473d 100644 (file)
@@ -15,7 +15,7 @@ PASS context.pixelStorei(context.UNPACK_FLIP_Y_WEBGL, true) is undefined.
 PASS context.texImage2D(context.TEXTURE_2D, 0, context.RGBA, context.RGBA, context.UNSIGNED_BYTE, video) is undefined.
 PASS context.texSubImage2D(context.TEXTURE_2D) threw exception TypeError: Not enough arguments.
 PASS context.texSubImage2D(context.TEXTURE_2D, 0, 10, 20, 0, 0, context.RGBA, context.UNSIGNED_BYTE, null) is undefined.
-PASS context.texSubImage2D(context.TEXTURE_2D, 0, 10, 20, 0, 0, context.RGBA, context.UNSIGNED_BYTE, 0) is undefined.
+PASS context.texSubImage2D(context.TEXTURE_2D, 0, 10, 20, 0, 0, context.RGBA, context.UNSIGNED_BYTE, 0) threw exception TypeError: Argument 9 ('pixels') to WebGLRenderingContextBase.texSubImage2D must be an instance of ArrayBufferView.
 PASS context.texSubImage2D(context.TEXTURE_2D, 0, 10, 20, 0, context.UNSIGNED_BYTE, 0) threw exception TypeError: Type error.
 PASS context.pixelStorei(context.UNPACK_FLIP_Y_WEBGL, false) is undefined.
 PASS context.texSubImage2D(context.TEXTURE_2D, 0, 10, 20, context.RGBA, context.UNSIGNED_BYTE, imageData) is undefined.
index 7ecc763..6a33baa 100644 (file)
@@ -89,18 +89,17 @@ test("Passing a buffer not large enough to texImage2D should generate an INVALID
      },
      gl.INVALID_OPERATION);
 
-// We do not do strict type checking for ArrayBufferView type.
 test("Passing texImage2D parameter data of Number type should generate an INVALID_OPERATION",
      function () {
         gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 64, 64, 0, gl.RGBA, gl.UNSIGNED_BYTE, 42);
      },
-     gl.INVALID_OPERATION);
+     "exception");
 
 test("Passing texImage2D parameter data of String type should generate an INVALID_OPERATION",
      function () {
         gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 64, 64, 0, gl.RGBA, gl.UNSIGNED_BYTE, "not a buffer");
      },
-     gl.INVALID_OPERATION);
+     "exception");
 test("Passing a buffer not large enough to texSubImage2D should generate an INVALID_OPERATION",
      function () {
         var tooSmall = new Uint8Array(64);
@@ -112,13 +111,13 @@ test("Passing texSubImage2D parameter data of Number type should generate an INV
      function () {
         gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 64, 64, gl.RGBA, gl.UNSIGNED_BYTE, 42);
      },
-     gl.INVALID_VALUE);
+     "exception");
 
 test("Passing texSubImage2D parameter data of String type should generate an INVALID_VALUE",
      function () {
         gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 64, 64, gl.RGBA, gl.UNSIGNED_BYTE, "not a buffer");
      },
-     gl.INVALID_VALUE);
+     "exception");
 
 debug("");
 var successfullyParsed = true;
index d4f63a5..e5589ab 100644 (file)
@@ -1,3 +1,19 @@
+2016-10-20  Chris Dumez  <cdumez@apple.com>
+
+        Passing a number as the pixel parameter to texImage2D() doesn't thrown an exception
+        https://bugs.webkit.org/show_bug.cgi?id=163715
+
+        Reviewed by Darin Adler.
+
+        Enable strict type checking for typed arrays in the bindings, similarly
+        do what we do for other wrapper types, as per Web IDL.
+
+        No new tests, updated existing tests.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateImplementation):
+        (GenerateParametersCheck):
+
 2016-10-20  Myles C. Maxfield  <mmaxfield@apple.com>
 
         Improve error message when passing a null ArrayBuffer to bufferData()
index e17ace3..80f5255 100644 (file)
@@ -3444,7 +3444,7 @@ sub GenerateImplementation
                 my $shouldPassByReference = ShouldPassWrapperByReference($attribute->signature, $interface);
 
                 my ($nativeValue, $mayThrowException) = JSValueToNative($interface, $attribute->signature, "value", $attribute->signature->extendedAttributes->{Conditional}, "&state", "state", "thisObject");
-                if (!$shouldPassByReference && $codeGenerator->IsWrapperType($type)) {
+                if (!$shouldPassByReference && ($codeGenerator->IsWrapperType($type) || $codeGenerator->IsTypedArrayType($type))) {
                     $implIncludes{"<runtime/Error.h>"} = 1;
                     push(@implContent, "    " . GetNativeTypeFromSignature($interface, $attribute->signature) . " nativeValue = nullptr;\n");
                     push(@implContent, "    if (!value.isUndefinedOrNull()) {\n");
@@ -4312,7 +4312,7 @@ sub GenerateParametersCheck
             die "Variadic parameter is already handled here" if $parameter->isVariadic;
             my $argumentLookupMethod = $parameter->isOptional ? "argument" : "uncheckedArgument";
 
-            if (!$shouldPassByReference && $codeGenerator->IsWrapperType($type)) {
+            if (!$shouldPassByReference && ($codeGenerator->IsWrapperType($type) || $codeGenerator->IsTypedArrayType($type))) {
                 $implIncludes{"<runtime/Error.h>"} = 1;
                 my $checkedArgument = "state->$argumentLookupMethod($argumentIndex)";
                 my $uncheckedArgument = "state->uncheckedArgument($argumentIndex)";