This bug report is from raimi at sourceforge.
i think i have found a bug that was introduced with 1.11: the
state_* functions lost their ability to check for underflow. for
example, state_peek was modified from:
"int state_peek(int relative)",
"{",
"int ptr;",
" ptr=stateptr-relative;",
" if (ptr<0)",
" return -1;",
" return statestk[ptr];",
to:
"final int state_peek(int relative)",
"{",
" return statestk[stateptr-relative];",
"}",
... which triggers an ArrayIndexOutOfBoundException in yyparse() in
the
"ERROR RECOVERY" part:
yyn = yysindex[state_peek(0)];
if ((yyn != 0) && (yyn += YYERRCODE) >= 0 &&
yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
...when a syntax error occurs at the "top level". it's easy to
reproduce: take your favourite language and let it parse an unexpected
token (which used to trigger a simple "syntax error"). with 1.12 (and
probably 1.11) it triggers ArrayIndexOutOfBoundsException: -1 in
yyparse/state_peek.
i tried to hand-fix those methods, but that just defers the problem and
does not result in my precious "syntax error". The error recovery is
probably different.
Logged In: YES
user_id=482413
You are right, there is a regression in 1.11 and 1.12. The problem is not
state_* functions itself, but there is important test right before
yyn = yysindex[state_peek(0)];
which was removed.
The correct code should look like this:
if (stateptr<0) //check for under & overflow here
{
yyerror("stack underflow. aborting..."); //note lower case 's'
return 1;
}
yyn = yysindex[state_peek(0)];
Logged In: YES
user_id=482413
Fixed in CVS trunk.
Checking in skeleton.c;
/cvsroot/byaccj/1.1/src/skeleton.c,v <-- skeleton.c
new revision: 1.6; previous revision: 1.5
done
entertainment here
http://silktime.net/articles/snipe-point-little-cayman.html best of snipe point little cayman
You see it here
http://silktime.net/articles/chicago-cutlery-cutting-board.html
Best chicago cutlery cutting board