Fixed bug reported on tack-devel mailing list on 20-3-2011

This commit is contained in:
cjhjacobs 2011-05-18 19:19:19 +02:00
parent b6dfaefeff
commit 58613009f8

View file

@ -189,7 +189,13 @@ cons_t xgetarb(l,f) int l; FILE *f ; {
shift=0 ; val=0 ; shift=0 ; val=0 ;
while ( l-- ) { while ( l-- ) {
val += ((cons_t)(c = ctrunc(xgetc(f))))<<shift ; // val += ((cons_t)(c = ctrunc(xgetc(f))))<<shift ;
// Bug here: shifts with too large shift counts
// get unspecified results. --Ceriel
c = ctrunc(xgetc(f));
if (shift < 8 * sizeof(cons_t)) {
val += ((cons_t)c)<<shift ;
}
shift += 8 ; shift += 8 ;
} }
if (c == 0377 && shift > 8 && ((shift>>3)&1)) { if (c == 0377 && shift > 8 && ((shift>>3)&1)) {