Skip to content

Commit

Permalink
PCD decoder overruns the shuffle buffer, Fixes #568
Browse files Browse the repository at this point in the history
  • Loading branch information
wiredfool committed Feb 2, 2016
1 parent 756d8a6 commit ae453aa
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 2 deletions.
Binary file added Tests/images/hopper.pcd
Binary file not shown.
18 changes: 18 additions & 0 deletions Tests/test_file_pcd.py
@@ -0,0 +1,18 @@
from helper import unittest, PillowTestCase, hopper
from PIL import Image

class TestFilePcd(PillowTestCase):

def test_load_raw(self):
im = Image.open('Tests/images/hopper.pcd')
im.load() # should not segfault.

# Note that this image was created with a resized hopper
# image, which was then converted to pcd with imagemagick
# and the colors are wonky in Pillow. It's unclear if this
# is a pillow or a convert issue, as other images not generated
# from convert look find on pillow and not imagemagick.

#target = hopper().resize((768,512))
#self.assert_image_similar(im, target, 10)

4 changes: 2 additions & 2 deletions libImaging/PcdDecode.c
Expand Up @@ -47,7 +47,7 @@ ImagingPcdDecode(Imaging im, ImagingCodecState state, UINT8* buf, int bytes)
out[0] = ptr[x];
out[1] = ptr[(x+4*state->xsize)/2];
out[2] = ptr[(x+5*state->xsize)/2];
out += 4;
out += 3;
}

state->shuffle((UINT8*) im->image[state->y],
Expand All @@ -62,7 +62,7 @@ ImagingPcdDecode(Imaging im, ImagingCodecState state, UINT8* buf, int bytes)
out[0] = ptr[x+state->xsize];
out[1] = ptr[(x+4*state->xsize)/2];
out[2] = ptr[(x+5*state->xsize)/2];
out += 4;
out += 3;
}

state->shuffle((UINT8*) im->image[state->y],
Expand Down

0 comments on commit ae453aa

Please sign in to comment.