mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-11-10 19:56:47 +03:00
Fix for integer overflow in path.c
This commit is contained in:
parent
d3727b523e
commit
c6ec3be0d6
|
@ -3,7 +3,7 @@ from helper import unittest, PillowTestCase
|
|||
from PIL import ImagePath
|
||||
|
||||
import array
|
||||
|
||||
import struct
|
||||
|
||||
class TestImagePath(PillowTestCase):
|
||||
|
||||
|
@ -62,6 +62,34 @@ class TestImagePath(PillowTestCase):
|
|||
self.assertEqual(list(p), [(0.0, 1.0)])
|
||||
|
||||
|
||||
def test_overflow_segfault(self):
|
||||
try:
|
||||
# post patch, this fails with a memory error
|
||||
x = evil()
|
||||
|
||||
# This fails due to the invalid malloc above,
|
||||
# and segfaults
|
||||
for i in xrange(200000):
|
||||
x[i] = "0"*16
|
||||
|
||||
except MemoryError as msg:
|
||||
self.assertTrue(msg)
|
||||
except:
|
||||
self.asserTrue(False, "Should have received a memory error")
|
||||
|
||||
|
||||
class evil:
|
||||
def __init__(self):
|
||||
self.corrupt = ImagePath.Path(0x4000000000000000)
|
||||
|
||||
def __getitem__(self, i):
|
||||
x = self.corrupt[i]
|
||||
return struct.pack("dd", x[0], x[1])
|
||||
|
||||
def __setitem__(self, i, x):
|
||||
self.corrupt[i] = struct.unpack("dd", x)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user