Title: [161684] trunk
Revision
161684
Author
bfulg...@apple.com
Date
2014-01-10 15:28:29 -0800 (Fri, 10 Jan 2014)

Log Message

Source/WebCore: [WebGL] Correct uniform input validation for texture sampler uniform
https://bugs.webkit.org/show_bug.cgi?id=126775

Reviewed by Dean Jackson.

Added fast/canvas/webgl/uniform-samplers-test.html

* html/canvas/WebGLRenderingContext.cpp:
(WebCore::WebGLRenderingContext::uniform1iv): Access Int32Array data properly.

LayoutTests: [WebGL] Correct uniform input validation for texture sampler uniforms.
https://bugs.webkit.org/show_bug.cgi?id=126775

Reviewed by Dean Jackson.

* fast/canvas/webgl/uniform-samplers-test.html: Add a test that
shows that we can set sampler uniforms using Int32Array types.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (161683 => 161684)


--- trunk/LayoutTests/ChangeLog	2014-01-10 23:17:57 UTC (rev 161683)
+++ trunk/LayoutTests/ChangeLog	2014-01-10 23:28:29 UTC (rev 161684)
@@ -1,3 +1,13 @@
+2014-01-10  Brent Fulgham  <bfulg...@apple.com>
+
+        [WebGL] Correct uniform input validation for texture sampler uniforms.
+        https://bugs.webkit.org/show_bug.cgi?id=126775
+
+        Reviewed by Dean Jackson.
+
+        * fast/canvas/webgl/uniform-samplers-test.html: Add a test that
+        shows that we can set sampler uniforms using Int32Array types.
+
 2014-01-10  Dirk Schulze  <k...@webkit.org>
 
         Make clipping path from basic-shapes relative to <box> value

Copied: trunk/LayoutTests/fast/canvas/webgl/uniform-samplers-test.html (from rev 161670, trunk/LayoutTests/webgl/1.0.2/resources/webgl_test_files/conformance/uniforms/uniform-samplers-test.html) (0 => 161684)


--- trunk/LayoutTests/fast/canvas/webgl/uniform-samplers-test.html	                        (rev 0)
+++ trunk/LayoutTests/fast/canvas/webgl/uniform-samplers-test.html	2014-01-10 23:28:29 UTC (rev 161684)
@@ -0,0 +1,114 @@
+<!--
+
+/*
+** Copyright (c) 2012 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+-->
+
+<!DOCTYPE html>
+<html>
+  <head>
+<meta charset="utf-8">
+    <title>WebGL sampler uniforms conformance test.</title>
+    <link rel="stylesheet" href=""
+    <script src=""
+    <script src="" </script>
+    <script src=""
+</head>
+<body>
+<canvas id="example" width="2" height="2" style="width: 40px; height: 40px;"></canvas>
+<div id="description"></div>
+<div id="console"></div>
+
+  <script>
+"use strict";
+function init()
+{
+  description(
+      "Tests that only Uniform1i and Uniform1iv can be used to set" +
+      "sampler uniforms.");
+
+  var canvas2d = document.getElementById("canvas2d");
+
+  var wtu = WebGLTestUtils;
+  var gl = wtu.create3DContext("example");
+  var program = wtu.setupTexturedQuad(gl);
+
+  var textureLoc = gl.getUniformLocation(program, "tex");
+  var testInt32Array = new Int32Array(4);
+
+  gl.uniform1i(textureLoc, 1);
+  glErrorShouldBe(gl, gl.NO_ERROR,
+            "uniform1i can set a sampler uniform");
+  gl.uniform1iv(textureLoc, [1]);
+  glErrorShouldBe(gl, gl.NO_ERROR,
+            "uniform1iv can set a sampler uniform");
+  gl.uniform1iv(textureLoc, testInt32Array);
+  glErrorShouldBe(gl, gl.NO_ERROR,
+            "uniform1iv can set a sampler uniform");
+  gl.uniform1f(textureLoc, 1);
+  glErrorShouldBe(gl, gl.INVALID_OPERATION,
+            "uniform1f returns INVALID_OPERATION if attempting to set a sampler uniform");
+  gl.uniform1fv(textureLoc, [1]);
+  glErrorShouldBe(gl, gl.INVALID_OPERATION,
+            "uniform1fv returns INVALID_OPERATION if attempting to set a sampler uniform");
+
+  var maxTextureUnits = gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS);
+
+  var success = true;
+  for (var ii = 0; ii < maxTextureUnits; ++ii) {
+    gl.uniform1i(textureLoc, ii);
+    success = success && (gl.getError() == gl.NO_ERROR);
+  }
+  expectTrue(success, "uniform1i works for any valid texture unit");
+
+  var success = true;
+  for (var ii = 0; ii < maxTextureUnits; ++ii) {
+    gl.uniform1iv(textureLoc, [ii]);
+    success = success && (gl.getError() == gl.NO_ERROR);
+  }
+  expectTrue(success, "uniform1iv works for any valid texture unit");
+
+  var success = true;
+  for (var ii = maxTextureUnits; ii < 0x10000; ++ii) {
+    gl.uniform1i(textureLoc, ii);
+    success = success && (gl.getError() == gl.INVALID_VALUE);
+  }
+  expectTrue(success, "uniform1i generates INVALID_VALUE for invalid texture units");
+
+  var success = true;
+  for (var ii = maxTextureUnits; ii < 0x10000; ++ii) {
+    gl.uniform1iv(textureLoc, [ii]);
+    success = success && (gl.getError() == gl.INVALID_VALUE);
+  }
+  expectTrue(success, "uniform1iv generates INVALID_VALUE for invalid texture units");
+
+}
+
+init();
+var successfullyParsed = true;
+</script>
+<script src=""
+</body>
+</html>
+

Modified: trunk/Source/WebCore/ChangeLog (161683 => 161684)


--- trunk/Source/WebCore/ChangeLog	2014-01-10 23:17:57 UTC (rev 161683)
+++ trunk/Source/WebCore/ChangeLog	2014-01-10 23:28:29 UTC (rev 161684)
@@ -1,3 +1,15 @@
+2014-01-10  Brent Fulgham  <bfulg...@apple.com>
+
+        [WebGL] Correct uniform input validation for texture sampler uniform
+        https://bugs.webkit.org/show_bug.cgi?id=126775
+
+        Reviewed by Dean Jackson.
+
+        Added fast/canvas/webgl/uniform-samplers-test.html
+
+        * html/canvas/WebGLRenderingContext.cpp:
+        (WebCore::WebGLRenderingContext::uniform1iv): Access Int32Array data properly.
+
 2014-01-10  Manuel Rego Casasnovas  <r...@igalia.com>
 
         [GTK] Unreviewed build fix after r161644.

Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp (161683 => 161684)


--- trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp	2014-01-10 23:17:57 UTC (rev 161683)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp	2014-01-10 23:28:29 UTC (rev 161684)
@@ -4208,8 +4208,9 @@
 
     if (location->type() == GraphicsContext3D::SAMPLER_2D || location->type() == GraphicsContext3D::SAMPLER_CUBE)
         for (unsigned i = 0; i < v->length(); ++i) {
-            if (((GC3Dint*)v)[i] >= static_cast<int>(m_textureUnits.size())) {
-                synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "uniform1i", "invalid texture unit");
+            if (v->data()[i] >= static_cast<int>(m_textureUnits.size())) {
+                LOG(WebGL, "Texture unit size=%zu, v[%d]=%d. Location type = %04X.", m_textureUnits.size(), i, v->data()[i], location->type());
+                synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "uniform1iv", "invalid texture unit");
                 return;
             }
         }
@@ -4227,7 +4228,7 @@
     if (location->type() == GraphicsContext3D::SAMPLER_2D || location->type() == GraphicsContext3D::SAMPLER_CUBE)
         for (unsigned i = 0; i < static_cast<unsigned>(size); ++i) {
             if (((GC3Dint*)v)[i] >= static_cast<int>(m_textureUnits.size())) {
-                synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "uniform1i", "invalid texture unit");
+                synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "uniform1iv", "invalid texture unit");
                 return;
             }
         }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to