ARB prog parser: Fix parameter array size comparison
authorIan Romanick <ian.d.romanick@intel.com>
Tue, 20 Oct 2009 17:58:14 +0000 (10:58 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 23 Oct 2009 02:20:15 +0000 (19:20 -0700)
Array indexes are invalid when >= the maximum, but array sizes are
only in valid when > the maximum.  This prevented programs from
declaring a single maximum size array.

See the piglit vp-max-array test.

src/mesa/shader/program_parse.tab.c
src/mesa/shader/program_parse.y

index 9f2d4de90fcc1c6632470d3e94ac489c34d9052a..c255e912ed238c0778bcf44ac16e10a06712f344 100644 (file)
@@ -3109,7 +3109,7 @@ yyreduce:
 /* Line 1455 of yacc.c  */
 #line 1041 "program_parse.y"
     {
-          if (((yyvsp[(1) - (1)].integer) < 1) || ((unsigned) (yyvsp[(1) - (1)].integer) >= state->limits->MaxParameters)) {
+          if (((yyvsp[(1) - (1)].integer) < 1) || ((unsigned) (yyvsp[(1) - (1)].integer) > state->limits->MaxParameters)) {
              yyerror(& (yylsp[(1) - (1)]), state, "invalid parameter array size");
              YYERROR;
           } else {
index 06c1915fbee9c93322bbee6dd4cb3b914ee619be..ae9e15ae5ae05151ee7285a2569638d1cf120d98 100644 (file)
@@ -1039,7 +1039,7 @@ optArraySize:
        }
        | INTEGER
         {
-          if (($1 < 1) || ((unsigned) $1 >= state->limits->MaxParameters)) {
+          if (($1 < 1) || ((unsigned) $1 > state->limits->MaxParameters)) {
              yyerror(& @1, state, "invalid parameter array size");
              YYERROR;
           } else {