mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-04 01:47: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