From cf3ff3b60f38d4765623639a4250bfb803480102 Mon Sep 17 00:00:00 2001 From: Dirk Lemstra Date: Fri, 5 Sep 2025 17:03:05 +0200 Subject: [PATCH] Fix issue where the size of a line is extended to 70 characters when writing a PBM image (#8346). --- coders/pnm.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/coders/pnm.c b/coders/pnm.c index 24fce894fa..9231c5bc77 100644 --- a/coders/pnm.c +++ b/coders/pnm.c @@ -1784,6 +1784,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image, *value; MagickBooleanType + added_newline, status; MagickOffsetType @@ -2015,6 +2016,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image, (void) SetImageType(image,BilevelType,exception); extent=1; q=pixels; + added_newline=MagickFalse; for (y=0; y < (ssize_t) image->rows; y++) { const Quantum @@ -2037,12 +2039,19 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image, *q++='\n'; (void) WriteBlob(image,(size_t) (q-pixels),pixels); q=pixels; + added_newline=MagickTrue; } } *q++=(unsigned char) (GetPixelLuma(image,p) >= ((double) QuantumRange/2.0) ? '0' : '1'); p+=(ptrdiff_t) GetPixelChannels(image); } + if (added_newline == MagickFalse) + { + *q++='\n'; + (void) WriteBlob(image,(size_t) (q-pixels),pixels); + q=pixels; + } if (image->previous == (Image *) NULL) { status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y, @@ -2074,6 +2083,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image, else (void) WriteBlobString(image,"4294967295\n"); q=pixels; + added_newline=MagickFalse; for (y=0; y < (ssize_t) image->rows; y++) { const Quantum @@ -2108,12 +2118,19 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image, *q++='\n'; (void) WriteBlob(image,(size_t) (q-pixels),pixels); q=pixels; + added_newline=MagickTrue; } } (void) memcpy((char *) q,buffer,extent); q+=(ptrdiff_t) extent; p+=(ptrdiff_t) GetPixelChannels(image); } + if (added_newline == MagickFalse) + { + *q++='\n'; + (void) WriteBlob(image,(size_t) (q-pixels),pixels); + q=pixels; + } if (image->previous == (Image *) NULL) { status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y, @@ -2147,6 +2164,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image, else (void) WriteBlobString(image,"4294967295\n"); q=pixels; + added_newline=MagickFalse; for (y=0; y < (ssize_t) image->rows; y++) { const Quantum @@ -2186,12 +2204,19 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image, *q++='\n'; (void) WriteBlob(image,(size_t) (q-pixels),pixels); q=pixels; + added_newline=MagickTrue; } } (void) memcpy((char *) q,buffer,extent); q+=(ptrdiff_t) extent; p+=(ptrdiff_t) GetPixelChannels(image); } + if (added_newline == MagickFalse) + { + *q++='\n'; + (void) WriteBlob(image,(size_t) (q-pixels),pixels); + q=pixels; + } if (image->previous == (Image *) NULL) { status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,