--- ray/src/common/color.c 2003/07/27 22:12:01 2.13 +++ ray/src/common/color.c 2005/02/09 00:00:17 2.16 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: color.c,v 2.13 2003/07/27 22:12:01 schorsch Exp $"; +static const char RCSid[] = "$Id: color.c,v 2.16 2005/02/09 00:00:17 greg Exp $"; #endif /* * color.c - routines for color calculations. @@ -17,6 +17,13 @@ static const char RCSid[] = "$Id: color.c,v 2.13 2003/ #include "color.h" +#ifdef getc_unlocked /* avoid horrendous overhead of flockfile */ +#undef getc +#undef putc +#define getc getc_unlocked +#define putc putc_unlocked +#endif + #define MINELEN 8 /* minimum scanline length for encoding */ #define MAXELEN 0x7fff /* maximum scanline length for encoding */ #define MINRUN 4 /* minimum run length */ @@ -167,14 +174,19 @@ register FILE *fp; code &= 127; if ((val = getc(fp)) == EOF) return -1; + if (j + code > len) + return -1; /* overrun */ while (code--) scanline[j++][i] = val; - } else /* non-run */ + } else { /* non-run */ + if (j + code > len) + return -1; /* overrun */ while (code--) { if ((val = getc(fp)) == EOF) return -1; scanline[j++][i] = val; } + } } return(0); }