[ANGLE] Use of uninitialized memory in ArrayBoundsClamper
authormvujovic@adobe.com <mvujovic@adobe.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 18 Dec 2012 19:47:22 +0000 (19:47 +0000)
committermvujovic@adobe.com <mvujovic@adobe.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 18 Dec 2012 19:47:22 +0000 (19:47 +0000)
https://bugs.webkit.org/show_bug.cgi?id=105218

Reviewed by Dean Jackson.

TIntermBinary::addIndexClamp is uninitialized when the compile flag
SH_CLAMP_INDIRECT_ARRAY_BOUNDS is not set. Then, addIndexClamp is used in OutputGLSLBase.
CSS Shaders needs to do a first validation pass without the SH_CLAMP_INDIRECT_ARRAY_BOUNDS
flag and its effects. However, sometimes addIndexClamp is true, which inserts clamping code
that causes a shader to fail compilation at the WebGL level.

* src/compiler/intermediate.h:
(TIntermBinary::TIntermBinary):

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

Source/ThirdParty/ANGLE/ChangeLog
Source/ThirdParty/ANGLE/src/compiler/intermediate.h

index 4f964e8..cf79ca0 100644 (file)
@@ -1,3 +1,19 @@
+2012-12-18  Max Vujovic  <mvujovic@adobe.com>
+
+        [ANGLE] Use of uninitialized memory in ArrayBoundsClamper
+        https://bugs.webkit.org/show_bug.cgi?id=105218
+
+        Reviewed by Dean Jackson.
+
+        TIntermBinary::addIndexClamp is uninitialized when the compile flag 
+        SH_CLAMP_INDIRECT_ARRAY_BOUNDS is not set. Then, addIndexClamp is used in OutputGLSLBase. 
+        CSS Shaders needs to do a first validation pass without the SH_CLAMP_INDIRECT_ARRAY_BOUNDS 
+        flag and its effects. However, sometimes addIndexClamp is true, which inserts clamping code
+        that causes a shader to fail compilation at the WebGL level.
+
+        * src/compiler/intermediate.h:
+        (TIntermBinary::TIntermBinary):
+
 2012-10-29  Anders Carlsson  <andersca@apple.com>
 
         Build WebKit as C++11 on Mac
index 9e9abbc..e63d425 100644 (file)
@@ -389,7 +389,7 @@ protected:
 //
 class TIntermBinary : public TIntermOperator {
 public:
-    TIntermBinary(TOperator o) : TIntermOperator(o) {}
+    TIntermBinary(TOperator o) : TIntermOperator(o), addIndexClamp(false) {}
 
     virtual TIntermBinary* getAsBinaryNode() { return this; }
     virtual void traverse(TIntermTraverser*);