mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-30 23:47:27 +03:00 
			
		
		
		
	Use _accept check in _open
This commit is contained in:
		
							parent
							
								
									0842985ebc
								
							
						
					
					
						commit
						0bf71a44ce
					
				|  | @ -278,7 +278,6 @@ def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: | ||||||
|         _write_multiple_frames(im, fp) |         _write_multiple_frames(im, fp) | ||||||
|     else: |     else: | ||||||
|         _write_single_frame(im, fp) |         _write_single_frame(im, fp) | ||||||
|     pass |  | ||||||
| 
 | 
 | ||||||
|     riff_end = fp.tell() |     riff_end = fp.tell() | ||||||
|     fp.seek(riff_offset - 4) |     fp.seek(riff_offset - 4) | ||||||
|  | @ -289,28 +288,29 @@ def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class AniFile: | class AniFile: | ||||||
|     def __init__(self, buf: BytesIO) -> None: |     def __init__(self, fp: BytesIO) -> None: | ||||||
|  |         if not _accept(fp.read(4)): | ||||||
|  |             SyntaxError("Not an ANI file") | ||||||
|  | 
 | ||||||
|         self.image_data = [] |         self.image_data = [] | ||||||
| 
 | 
 | ||||||
|         self.buf = buf |         self.buf = fp | ||||||
|         self.rate = None |         self.rate = None | ||||||
|         self.seq = None |         self.seq = None | ||||||
|         self.anih = None |         self.anih = None | ||||||
| 
 | 
 | ||||||
|         riff, size, fformat = struct.unpack("<4sI4s", buf.read(12)) |         size, fformat = struct.unpack("<I4s", fp.read(8)) | ||||||
|         if riff != b"RIFF": |  | ||||||
|             SyntaxError("Not an ANI file") |  | ||||||
| 
 | 
 | ||||||
|         self.riff = {"size": size, "fformat": fformat} |         self.riff = {"size": size, "fformat": fformat} | ||||||
| 
 | 
 | ||||||
|         chunkOffset = buf.tell() |         chunkOffset = fp.tell() | ||||||
|         while chunkOffset < self.riff["size"]: |         while chunkOffset < self.riff["size"]: | ||||||
|             buf.seek(chunkOffset) |             fp.seek(chunkOffset) | ||||||
|             chunk, size = struct.unpack("<4sI", buf.read(8)) |             chunk, size = struct.unpack("<4sI", fp.read(8)) | ||||||
|             chunkOffset = chunkOffset + size + 8 |             chunkOffset = chunkOffset + size + 8 | ||||||
| 
 | 
 | ||||||
|             if chunk == b"anih": |             if chunk == b"anih": | ||||||
|                 s = buf.read(36) |                 s = fp.read(36) | ||||||
|                 self.anih = { |                 self.anih = { | ||||||
|                     "size": i32(s),  # Data structure size (in bytes) |                     "size": i32(s),  # Data structure size (in bytes) | ||||||
|                     "nFrames": i32(s, 4),  # Number of frames |                     "nFrames": i32(s, 4),  # Number of frames | ||||||
|  | @ -325,24 +325,24 @@ class AniFile: | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|             if chunk == b"seq ": |             if chunk == b"seq ": | ||||||
|                 s = buf.read(size) |                 s = fp.read(size) | ||||||
|                 self.seq = [i32(s, i * 4) for i in range(size // 4)] |                 self.seq = [i32(s, i * 4) for i in range(size // 4)] | ||||||
| 
 | 
 | ||||||
|             if chunk == b"rate": |             if chunk == b"rate": | ||||||
|                 s = buf.read(size) |                 s = fp.read(size) | ||||||
|                 self.rate = [i32(s, i * 4) for i in range(size // 4)] |                 self.rate = [i32(s, i * 4) for i in range(size // 4)] | ||||||
| 
 | 
 | ||||||
|             if chunk == b"LIST": |             if chunk == b"LIST": | ||||||
|                 listtype = struct.unpack("<4s", buf.read(4))[0] |                 listtype = struct.unpack("<4s", fp.read(4))[0] | ||||||
|                 if listtype != b"fram": |                 if listtype != b"fram": | ||||||
|                     continue |                     continue | ||||||
| 
 | 
 | ||||||
|                 listOffset = 0 |                 listOffset = 0 | ||||||
|                 while listOffset < size - 8: |                 while listOffset < size - 8: | ||||||
|                     _, lSize = struct.unpack("<4sI", buf.read(8)) |                     _, lSize = struct.unpack("<4sI", fp.read(8)) | ||||||
|                     self.image_data.append({"offset": buf.tell(), "size": lSize}) |                     self.image_data.append({"offset": fp.tell(), "size": lSize}) | ||||||
| 
 | 
 | ||||||
|                     buf.read(lSize) |                     fp.read(lSize) | ||||||
|                     listOffset = listOffset + lSize + 8 |                     listOffset = listOffset + lSize + 8 | ||||||
| 
 | 
 | ||||||
|         if self.anih is None: |         if self.anih is None: | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user