Merge pull request #2419 from hugovk/numpy-zero-size

Fix division by zero when creating 0x0 image from numpy array
This commit is contained in:
wiredfool 2017-02-22 10:06:15 +00:00 committed by GitHub
commit 5544781270
3 changed files with 11 additions and 3 deletions

View File

@ -2036,7 +2036,7 @@ def _check_size(size):
if len(size) != 2: if len(size) != 2:
raise ValueError("Size must be a tuple of length 2") raise ValueError("Size must be a tuple of length 2")
if size[0] < 0 or size[1] < 0: if size[0] < 0 or size[1] < 0:
raise ValueError("Width and Height must be => 0") raise ValueError("Width and height must be >= 0")
return True return True

View File

@ -204,6 +204,14 @@ class TestNumpy(PillowTestCase):
self.assertEqual(len(im.getdata()), len(arr)) self.assertEqual(len(im.getdata()), len(arr))
def test_zero_size(self):
# Shouldn't cause floating point exception
# See https://github.com/python-pillow/Pillow/issues/2259
im = Image.fromarray(numpy.empty((0, 0), dtype=numpy.uint8))
self.assertEqual(im.size, (0, 0))
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

2
map.c
View File

@ -342,7 +342,7 @@ PyImaging_MapBuffer(PyObject* self, PyObject* args)
stride = xsize * 4; stride = xsize * 4;
} }
if (ysize > INT_MAX / stride) { if (stride > 0 && ysize > INT_MAX / stride) {
PyErr_SetString(PyExc_MemoryError, "Integer overflow in ysize"); PyErr_SetString(PyExc_MemoryError, "Integer overflow in ysize");
return NULL; return NULL;
} }