static int // O - 1 on success, 0 on failure
cups_raster_update(cups_raster_t *r) // I - Raster stream
{
- int ret = 1; // Return value
+ int ret = 1; // Return value
+ unsigned bytesPerLine; // Expected bytes per line
if (r->sync == CUPS_RASTER_SYNCv1 || r->sync == CUPS_RASTER_REVSYNCv1 ||
ret = 0;
}
+ bytesPerLine = (r->header.cupsWidth * r->header.cupsBitsPerPixel + 7) / 8;
+ if (r->header.cupsColorOrder == CUPS_ORDER_BANDED)
+ bytesPerLine *= r->header.cupsNumColors;
+
if (r->header.cupsBytesPerLine == 0)
{
_cupsRasterAddError("Invalid raster line length 0.");
_cupsRasterAddError("Raster line length %u is not a multiple of the pixel size (%d).", r->header.cupsBytesPerLine, r->bpp);
ret = 0;
}
- else if (r->header.cupsBytesPerLine != ((r->header.cupsWidth * r->header.cupsBitsPerPixel + 7) / 8))
+ else if (r->header.cupsBytesPerLine != bytesPerLine)
{
_cupsRasterAddError("Raster line length %u does not match width (%u) and bits per pixel (%u).", r->header.cupsBytesPerLine, r->header.cupsWidth, r->header.cupsBitsPerPixel);
ret = 0;