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,15 +39,19 @@ class ImtImageFile(ImageFile.ImageFile): | ||||||
|         # Quick rejection: if there's not a LF among the first |         # Quick rejection: if there's not a LF among the first | ||||||
|         # 100 bytes, this is (probably) not a text header. |         # 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") |             raise SyntaxError("not an IM file") | ||||||
|         self.fp.seek(0) |  | ||||||
| 
 | 
 | ||||||
|         xsize = ysize = 0 |         xsize = ysize = 0 | ||||||
| 
 | 
 | ||||||
|         while True: |         while True: | ||||||
| 
 | 
 | ||||||
|             s = self.fp.read(1) |             if buffer: | ||||||
|  |                 s = buffer[:1] | ||||||
|  |                 buffer = buffer[1:] | ||||||
|  |             else: | ||||||
|  |                 s = self.fp.read(1) | ||||||
|             if not s: |             if not s: | ||||||
|                 break |                 break | ||||||
| 
 | 
 | ||||||
|  | @ -55,7 +59,12 @@ class ImtImageFile(ImageFile.ImageFile): | ||||||
| 
 | 
 | ||||||
|                 # image data begins |                 # image data begins | ||||||
|                 self.tile = [ |                 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 |                 break | ||||||
|  | @ -63,8 +72,11 @@ class ImtImageFile(ImageFile.ImageFile): | ||||||
|             else: |             else: | ||||||
| 
 | 
 | ||||||
|                 # read key/value pair |                 # read key/value pair | ||||||
|                 # FIXME: dangerous, may read whole file |                 if b"\n" not in buffer: | ||||||
|                 s = s + self.fp.readline() |                     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: |                 if len(s) == 1 or len(s) > 100: | ||||||
|                     break |                     break | ||||||
|                 if s[0] == ord(b"*"): |                 if s[0] == ord(b"*"): | ||||||
|  | @ -74,13 +86,13 @@ class ImtImageFile(ImageFile.ImageFile): | ||||||
|                 if not m: |                 if not m: | ||||||
|                     break |                     break | ||||||
|                 k, v = m.group(1, 2) |                 k, v = m.group(1, 2) | ||||||
|                 if k == "width": |                 if k == b"width": | ||||||
|                     xsize = int(v) |                     xsize = int(v) | ||||||
|                     self._size = xsize, ysize |                     self._size = xsize, ysize | ||||||
|                 elif k == "height": |                 elif k == b"height": | ||||||
|                     ysize = int(v) |                     ysize = int(v) | ||||||
|                     self._size = xsize, ysize |                     self._size = xsize, ysize | ||||||
|                 elif k == "pixel" and v == "n8": |                 elif k == b"pixel" and v == b"n8": | ||||||
|                     self.mode = "L" |                     self.mode = "L" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user