lex bug (v7, 2.8, 4.1, maybe others)
stewart at seismo.UUCP
stewart at seismo.UUCP
Thu May 24 03:08:06 AEST 1984
Lex versions: version 7, Berkeley 2.8 and 4.1 (probably
won't be visible on 32-bit machines, however).
This bug is not in lex itself, but in the boilerplate
lex pulls out of its library to make lex.yy.c.
The original cast two pointers to type int before
comparing them. Needless to say, on our 16-bit int pdp11
this causes errors when the addresses creep past 0x8000.
I don't know why the casts were inserted, the pointers were
the same type.
John Stewart
*** /usr/lib/lex/ncform Wed May 23 10:13:30 1984
--- /usr/lib/lex/ncform.old Thu Aug 11 23:51:26 1983
***************
*** 54,60
}
# endif
yyr = yyt;
! if (yyt > yycrank){
yyt = yyr + yych;
if (yyt <= yytop && yyt->verify+yysvec == yystate){
if(yyt->advance+yysvec == YYLERR) /* error transitions */
--- 54,60 -----
}
# endif
yyr = yyt;
! if ( (int)yyt > (int)yycrank){
yyt = yyr + yych;
if (yyt <= yytop && yyt->verify+yysvec == yystate){
if(yyt->advance+yysvec == YYLERR) /* error transitions */
***************
*** 64,70
}
}
# ifdef YYOPTIM
! else if(yyt < yycrank) { /* r < yycrank */
yyt = yyr = yycrank+(yycrank-yyt);
# ifdef LEXDEBUG
if(debug)fprintf(yyout,"compressed state\n");
--- 64,70 -----
}
}
# ifdef YYOPTIM
! else if((int)yyt < (int)yycrank) { /* r < yycrank */
yyt = yyr = yycrank+(yycrank-yyt);
# ifdef LEXDEBUG
if(debug)fprintf(yyout,"compressed state\n");
More information about the Comp.unix.wizards
mailing list