]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Fix regression in cupsRasterRead/WriteHeader. master
authorMichael R Sweet <msweet@msweet.org>
Thu, 16 Apr 2026 17:15:31 +0000 (13:15 -0400)
committerMichael R Sweet <msweet@msweet.org>
Thu, 16 Apr 2026 17:15:31 +0000 (13:15 -0400)
cups/raster-stream.c

index 3f897d49a199f4f900cd64ac1300cb28cc3c7bac..105cd67431a2bbbec0be52f36d490f99b09cc229 100644 (file)
@@ -1726,7 +1726,8 @@ cups_raster_read(cups_raster_t *r,        // I - Raster stream
 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 ||
@@ -1842,6 +1843,10 @@ cups_raster_update(cups_raster_t *r)     // I - Raster stream
     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.");
@@ -1857,7 +1862,7 @@ cups_raster_update(cups_raster_t *r)      // I - Raster stream
     _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;