Skip to content

Commit 5a51528

Browse files
committed
Fix issue where the size of a line is extended to 70 characters when writing a PBM image.
1 parent acf9080 commit 5a51528

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

coders/pnm.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1544,6 +1544,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
15441544
index;
15451545

15461546
MagickBooleanType
1547+
added_newline,
15471548
status;
15481549

15491550
MagickOffsetType
@@ -1762,6 +1763,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
17621763
(void) SetImageType(image,BilevelType);
17631764
extent=1;
17641765
q=pixels;
1766+
added_newline=MagickFalse;
17651767
for (y=0; y < (ssize_t) image->rows; y++)
17661768
{
17671769
const PixelPacket
@@ -1784,12 +1786,19 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
17841786
*q++='\n';
17851787
(void) WriteBlob(image,(size_t) (q-pixels),pixels);
17861788
q=pixels;
1789+
added_newline=MagickTrue;
17871790
}
17881791
}
17891792
*q++=(unsigned char) (GetPixelLuma(image,p) >= ((MagickRealType)
17901793
QuantumRange/2.0) ? '0' : '1');
17911794
p++;
17921795
}
1796+
if (added_newline == MagickFalse)
1797+
{
1798+
*q++='\n';
1799+
(void) WriteBlob(image,(size_t) (q-pixels),pixels);
1800+
q=pixels;
1801+
}
17931802
if (image->previous == (Image *) NULL)
17941803
{
17951804
status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -1821,6 +1830,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
18211830
else
18221831
(void) WriteBlobString(image,"4294967295\n");
18231832
q=pixels;
1833+
added_newline=MagickFalse;
18241834
for (y=0; y < (ssize_t) image->rows; y++)
18251835
{
18261836
const PixelPacket
@@ -1855,12 +1865,19 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
18551865
*q++='\n';
18561866
(void) WriteBlob(image,(size_t) (q-pixels),pixels);
18571867
q=pixels;
1868+
added_newline=MagickTrue;
18581869
}
18591870
}
18601871
(void) memcpy((char *) q,buffer,extent);
18611872
q+=(ptrdiff_t) extent;
18621873
p++;
18631874
}
1875+
if (added_newline == MagickFalse)
1876+
{
1877+
*q++='\n';
1878+
(void) WriteBlob(image,(size_t) (q-pixels),pixels);
1879+
q=pixels;
1880+
}
18641881
if (image->previous == (Image *) NULL)
18651882
{
18661883
status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
@@ -1894,6 +1911,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
18941911
else
18951912
(void) WriteBlobString(image,"4294967295\n");
18961913
q=pixels;
1914+
added_newline=MagickFalse;
18971915
for (y=0; y < (ssize_t) image->rows; y++)
18981916
{
18991917
const PixelPacket
@@ -1933,12 +1951,19 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
19331951
*q++='\n';
19341952
(void) WriteBlob(image,(size_t) (q-pixels),pixels);
19351953
q=pixels;
1954+
added_newline=MagickTrue;
19361955
}
19371956
}
19381957
(void) memcpy((char *) q,buffer,extent);
19391958
q+=(ptrdiff_t) extent;
19401959
p++;
19411960
}
1961+
if (added_newline == MagickFalse)
1962+
{
1963+
*q++='\n';
1964+
(void) WriteBlob(image,(size_t) (q-pixels),pixels);
1965+
q=pixels;
1966+
}
19421967
if (image->previous == (Image *) NULL)
19431968
{
19441969
status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,

0 commit comments

Comments
 (0)