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