mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-31 16:07:30 +03:00 
			
		
		
		
	Merge pull request #6623 from radarhere/imt
This commit is contained in:
		
						commit
						baaf65453a
					
				
							
								
								
									
										
											BIN
										
									
								
								Tests/images/bw_gradient.imt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Tests/images/bw_gradient.imt
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										19
									
								
								Tests/test_file_imt.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								Tests/test_file_imt.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| import io | ||||
| 
 | ||||
| import pytest | ||||
| 
 | ||||
| from PIL import Image, ImtImagePlugin | ||||
| 
 | ||||
| from .helper import assert_image_equal_tofile | ||||
| 
 | ||||
| 
 | ||||
| def test_sanity(): | ||||
|     with Image.open("Tests/images/bw_gradient.imt") as im: | ||||
|         assert_image_equal_tofile(im, "Tests/images/bw_gradient.png") | ||||
| 
 | ||||
| 
 | ||||
| @pytest.mark.parametrize("data", (b"\n", b"\n-", b"width 1\n")) | ||||
| def test_invalid_file(data): | ||||
|     with io.BytesIO(data) as fp: | ||||
|         with pytest.raises(SyntaxError): | ||||
|             ImtImagePlugin.ImtImageFile(fp) | ||||
|  | @ -39,14 +39,18 @@ class ImtImageFile(ImageFile.ImageFile): | |||
|         # Quick rejection: if there's not a LF among the first | ||||
|         # 100 bytes, this is (probably) not a text header. | ||||
| 
 | ||||
|         if b"\n" not in self.fp.read(100): | ||||
|         buffer = self.fp.read(100) | ||||
|         if b"\n" not in buffer: | ||||
|             raise SyntaxError("not an IM file") | ||||
|         self.fp.seek(0) | ||||
| 
 | ||||
|         xsize = ysize = 0 | ||||
| 
 | ||||
|         while True: | ||||
| 
 | ||||
|             if buffer: | ||||
|                 s = buffer[:1] | ||||
|                 buffer = buffer[1:] | ||||
|             else: | ||||
|                 s = self.fp.read(1) | ||||
|             if not s: | ||||
|                 break | ||||
|  | @ -55,7 +59,12 @@ class ImtImageFile(ImageFile.ImageFile): | |||
| 
 | ||||
|                 # image data begins | ||||
|                 self.tile = [ | ||||
|                     ("raw", (0, 0) + self.size, self.fp.tell(), (self.mode, 0, 1)) | ||||
|                     ( | ||||
|                         "raw", | ||||
|                         (0, 0) + self.size, | ||||
|                         self.fp.tell() - len(buffer), | ||||
|                         (self.mode, 0, 1), | ||||
|                     ) | ||||
|                 ] | ||||
| 
 | ||||
|                 break | ||||
|  | @ -63,8 +72,11 @@ class ImtImageFile(ImageFile.ImageFile): | |||
|             else: | ||||
| 
 | ||||
|                 # read key/value pair | ||||
|                 # FIXME: dangerous, may read whole file | ||||
|                 s = s + self.fp.readline() | ||||
|                 if b"\n" not in buffer: | ||||
|                     buffer += self.fp.read(100) | ||||
|                 lines = buffer.split(b"\n") | ||||
|                 s += lines.pop(0) | ||||
|                 buffer = b"\n".join(lines) | ||||
|                 if len(s) == 1 or len(s) > 100: | ||||
|                     break | ||||
|                 if s[0] == ord(b"*"): | ||||
|  | @ -74,13 +86,13 @@ class ImtImageFile(ImageFile.ImageFile): | |||
|                 if not m: | ||||
|                     break | ||||
|                 k, v = m.group(1, 2) | ||||
|                 if k == "width": | ||||
|                 if k == b"width": | ||||
|                     xsize = int(v) | ||||
|                     self._size = xsize, ysize | ||||
|                 elif k == "height": | ||||
|                 elif k == b"height": | ||||
|                     ysize = int(v) | ||||
|                     self._size = xsize, ysize | ||||
|                 elif k == "pixel" and v == "n8": | ||||
|                 elif k == b"pixel" and v == b"n8": | ||||
|                     self.mode = "L" | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user