mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-03-12 16:55:47 +03:00
Check that _fp type is not DeferredError before use
This commit is contained in:
parent
a4f976ca27
commit
a13609516c
|
@ -24,6 +24,7 @@ from __future__ import annotations
|
|||
|
||||
from . import Image
|
||||
from ._binary import i32le as i32
|
||||
from ._util import DeferredError
|
||||
from .PcxImagePlugin import PcxImageFile
|
||||
|
||||
MAGIC = 0x3ADE68B1 # QUIZ: what's this value, then?
|
||||
|
@ -66,6 +67,8 @@ class DcxImageFile(PcxImageFile):
|
|||
def seek(self, frame: int) -> None:
|
||||
if not self._seek_check(frame):
|
||||
return
|
||||
if isinstance(self._fp, DeferredError):
|
||||
raise self._fp.ex
|
||||
self.frame = frame
|
||||
self.fp = self._fp
|
||||
self.fp.seek(self._offset[frame])
|
||||
|
|
|
@ -22,6 +22,7 @@ from . import Image, ImageFile, ImagePalette
|
|||
from ._binary import i16le as i16
|
||||
from ._binary import i32le as i32
|
||||
from ._binary import o8
|
||||
from ._util import DeferredError
|
||||
|
||||
#
|
||||
# decoder
|
||||
|
@ -134,6 +135,8 @@ class FliImageFile(ImageFile.ImageFile):
|
|||
self._seek(f)
|
||||
|
||||
def _seek(self, frame: int) -> None:
|
||||
if isinstance(self._fp, DeferredError):
|
||||
raise self._fp.ex
|
||||
if frame == 0:
|
||||
self.__frame = -1
|
||||
self._fp.seek(self.__rewind)
|
||||
|
|
|
@ -45,6 +45,7 @@ from . import (
|
|||
from ._binary import i16le as i16
|
||||
from ._binary import o8
|
||||
from ._binary import o16le as o16
|
||||
from ._util import DeferredError
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from . import _imaging
|
||||
|
@ -167,6 +168,8 @@ class GifImageFile(ImageFile.ImageFile):
|
|||
raise EOFError(msg) from e
|
||||
|
||||
def _seek(self, frame: int, update_image: bool = True) -> None:
|
||||
if isinstance(self._fp, DeferredError):
|
||||
raise self._fp.ex
|
||||
if frame == 0:
|
||||
# rewind
|
||||
self.__offset = 0
|
||||
|
|
|
@ -31,6 +31,7 @@ import re
|
|||
from typing import IO, Any
|
||||
|
||||
from . import Image, ImageFile, ImagePalette
|
||||
from ._util import DeferredError
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Standard tags
|
||||
|
@ -290,6 +291,8 @@ class ImImageFile(ImageFile.ImageFile):
|
|||
def seek(self, frame: int) -> None:
|
||||
if not self._seek_check(frame):
|
||||
return
|
||||
if isinstance(self._fp, DeferredError):
|
||||
raise self._fp.ex
|
||||
|
||||
self.frame = frame
|
||||
|
||||
|
|
|
@ -604,7 +604,7 @@ class Image:
|
|||
return self
|
||||
|
||||
def _close_fp(self):
|
||||
if getattr(self, "_fp", False):
|
||||
if getattr(self, "_fp", False) and not isinstance(self._fp, DeferredError):
|
||||
if self._fp != self.fp:
|
||||
self._fp.close()
|
||||
self._fp = DeferredError(ValueError("Operation on closed image"))
|
||||
|
|
|
@ -32,6 +32,7 @@ from . import (
|
|||
TiffImagePlugin,
|
||||
)
|
||||
from ._binary import o32le
|
||||
from ._util import DeferredError
|
||||
|
||||
|
||||
def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
|
||||
|
@ -125,11 +126,15 @@ class MpoImageFile(JpegImagePlugin.JpegImageFile):
|
|||
self.readonly = 1
|
||||
|
||||
def load_seek(self, pos: int) -> None:
|
||||
if isinstance(self._fp, DeferredError):
|
||||
raise self._fp.ex
|
||||
self._fp.seek(pos)
|
||||
|
||||
def seek(self, frame: int) -> None:
|
||||
if not self._seek_check(frame):
|
||||
return
|
||||
if isinstance(self._fp, DeferredError):
|
||||
raise self._fp.ex
|
||||
self.fp = self._fp
|
||||
self.offset = self.__mpoffsets[frame]
|
||||
|
||||
|
|
|
@ -48,6 +48,7 @@ from ._binary import i32be as i32
|
|||
from ._binary import o8
|
||||
from ._binary import o16be as o16
|
||||
from ._binary import o32be as o32
|
||||
from ._util import DeferredError
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from . import _imaging
|
||||
|
@ -869,6 +870,8 @@ class PngImageFile(ImageFile.ImageFile):
|
|||
|
||||
def _seek(self, frame: int, rewind: bool = False) -> None:
|
||||
assert self.png is not None
|
||||
if isinstance(self._fp, DeferredError):
|
||||
raise self._fp.ex
|
||||
|
||||
self.dispose: _imaging.ImagingCore | None
|
||||
dispose_extent = None
|
||||
|
|
|
@ -27,6 +27,7 @@ from ._binary import i16be as i16
|
|||
from ._binary import i32be as i32
|
||||
from ._binary import si16be as si16
|
||||
from ._binary import si32be as si32
|
||||
from ._util import DeferredError
|
||||
|
||||
MODES = {
|
||||
# (photoshop mode, bits) -> (pil mode, required channels)
|
||||
|
@ -148,6 +149,8 @@ class PsdImageFile(ImageFile.ImageFile):
|
|||
) -> list[tuple[str, str, tuple[int, int, int, int], list[ImageFile._Tile]]]:
|
||||
layers = []
|
||||
if self._layers_position is not None:
|
||||
if isinstance(self._fp, DeferredError):
|
||||
raise self._fp.ex
|
||||
self._fp.seek(self._layers_position)
|
||||
_layer_data = io.BytesIO(ImageFile._safe_read(self._fp, self._layers_size))
|
||||
layers = _layerinfo(_layer_data, self._layers_size)
|
||||
|
@ -167,6 +170,8 @@ class PsdImageFile(ImageFile.ImageFile):
|
|||
def seek(self, layer: int) -> None:
|
||||
if not self._seek_check(layer):
|
||||
return
|
||||
if isinstance(self._fp, DeferredError):
|
||||
raise self._fp.ex
|
||||
|
||||
# seek to given layer (1..max)
|
||||
try:
|
||||
|
|
|
@ -40,6 +40,7 @@ import sys
|
|||
from typing import IO, TYPE_CHECKING, Any, cast
|
||||
|
||||
from . import Image, ImageFile
|
||||
from ._util import DeferredError
|
||||
|
||||
|
||||
def isInt(f: Any) -> int:
|
||||
|
@ -178,6 +179,8 @@ class SpiderImageFile(ImageFile.ImageFile):
|
|||
raise EOFError(msg)
|
||||
if not self._seek_check(frame):
|
||||
return
|
||||
if isinstance(self._fp, DeferredError):
|
||||
raise self._fp.ex
|
||||
self.stkoffset = self.hdrlen + frame * (self.hdrlen + self.imgbytes)
|
||||
self.fp = self._fp
|
||||
self.fp.seek(self.stkoffset)
|
||||
|
|
|
@ -58,7 +58,7 @@ from ._binary import i32be as i32
|
|||
from ._binary import o8
|
||||
from ._deprecate import deprecate
|
||||
from ._typing import StrOrBytesPath
|
||||
from ._util import is_path
|
||||
from ._util import DeferredError, is_path
|
||||
from .TiffTags import TYPES
|
||||
|
||||
if TYPE_CHECKING:
|
||||
|
@ -1212,6 +1212,8 @@ class TiffImageFile(ImageFile.ImageFile):
|
|||
self._im = None
|
||||
|
||||
def _seek(self, frame: int) -> None:
|
||||
if isinstance(self._fp, DeferredError):
|
||||
raise self._fp.ex
|
||||
self.fp = self._fp
|
||||
|
||||
while len(self._frame_pos) <= frame:
|
||||
|
|
Loading…
Reference in New Issue
Block a user