diff --git a/contrib/libtests/pngimage.c b/contrib/libtests/pngimage.c index be176b2bc..1ee8568e5 100644 --- a/contrib/libtests/pngimage.c +++ b/contrib/libtests/pngimage.c @@ -1105,6 +1105,7 @@ compare_read(struct display *dp, int applied_transforms) { unsigned long y; int bpp; /* bits-per-pixel then bytes-per-pixel */ + int ppb; /* pixels per byte, or 1 for multi-byte pixels */ /* components are up to 8 bytes in size */ png_byte sig_bits[8]; png_color_8p sBIT; @@ -1187,16 +1188,19 @@ compare_read(struct display *dp, int applied_transforms) sig_bits[2*b+1] = (png_byte)sig; sig_bits[2*b+0] = (png_byte)(sig >> 8); /* big-endian */ } + ppb = 1; break; case 8: /* One byte per component */ for (b=0; b*8 < bpp; ++b) sig_bits[b] = (png_byte)(0xff00 >> sig_bits[b]); + ppb = 1; break; case 1: /* allowed, but dumb */ /* Value is 1 */ sig_bits[0] = 0xff; + ppb = 8; break; case 2: /* Replicate 4 times */ @@ -1205,6 +1209,7 @@ compare_read(struct display *dp, int applied_transforms) b |= b << 2; b |= b << 4; sig_bits[0] = (png_byte)b; + ppb = 4; break; case 4: /* Replicate twice */ @@ -1212,10 +1217,12 @@ compare_read(struct display *dp, int applied_transforms) b = 0xf & ((0xf << 4) >> sig_bits[0]); b |= b << 4; sig_bits[0] = (png_byte)b; + ppb = 2; break; default: display_log(dp, LIBPNG_BUG, "invalid bit depth %d", bit_depth); + ppb = 1; break; } @@ -1240,7 +1247,7 @@ compare_read(struct display *dp, int applied_transforms) png_bytep orig = dp->original_rows[y]; unsigned long x; - for (x=0; x<(width-(mask!=0)); ++x) + for (x=0; x<(width-(mask!=0)); x += ppb) { int b;