summaryrefslogtreecommitdiff
path: root/src/glsl/ir_constant_expression.cpp
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2010-07-07 09:07:09 -0700
committerEric Anholt <eric@anholt.net>2010-07-07 09:07:52 -0700
commit570dc0d4004bf09d257b3e4c8664d3c26a8af510 (patch)
treeb3a3aec8713694b0e8643665876923da140067cb /src/glsl/ir_constant_expression.cpp
parentd4d630b72c7b7f38074addda0f1b819608247d93 (diff)
glsl2: Avoid null deref in scalar constant unop expressions.
Diffstat (limited to 'src/glsl/ir_constant_expression.cpp')
-rw-r--r--src/glsl/ir_constant_expression.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/glsl/ir_constant_expression.cpp b/src/glsl/ir_constant_expression.cpp
index 541398a91c..98cbb6cec6 100644
--- a/src/glsl/ir_constant_expression.cpp
+++ b/src/glsl/ir_constant_expression.cpp
@@ -151,7 +151,12 @@ ir_constant_visitor::visit(ir_expression *ir)
*/
unsigned c0_inc = op0_scalar ? 1 : 0;
unsigned c1_inc = op1_scalar ? 1 : 0;
- unsigned components = op[op1_scalar ? 0 : 1]->type->components();
+ unsigned components;
+ if (op1_scalar || !op[1]) {
+ components = op[0]->type->components();
+ } else {
+ components = op[1]->type->components();
+ }
switch (ir->operation) {
case ir_unop_logic_not: