mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-04 09:57:43 +03:00 
			
		
		
		
	close files after loading for some file types
This commit is contained in:
		
							parent
							
								
									091d0c400c
								
							
						
					
					
						commit
						58484db509
					
				| 
						 | 
					@ -58,6 +58,7 @@ class DcxImageFile(PcxImageFile):
 | 
				
			||||||
            self._offset.append(offset)
 | 
					            self._offset.append(offset)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.__fp = self.fp
 | 
					        self.__fp = self.fp
 | 
				
			||||||
 | 
					        self._exclusive_fp = False
 | 
				
			||||||
        self.seek(0)
 | 
					        self.seek(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -84,6 +84,7 @@ class FliImageFile(ImageFile.ImageFile):
 | 
				
			||||||
        # set things up to decode first frame
 | 
					        # set things up to decode first frame
 | 
				
			||||||
        self.__frame = -1
 | 
					        self.__frame = -1
 | 
				
			||||||
        self.__fp = self.fp
 | 
					        self.__fp = self.fp
 | 
				
			||||||
 | 
					        self._exclusive_fp = False
 | 
				
			||||||
        self.__rewind = self.fp.tell()
 | 
					        self.__rewind = self.fp.tell()
 | 
				
			||||||
        self._n_frames = None
 | 
					        self._n_frames = None
 | 
				
			||||||
        self._is_animated = None
 | 
					        self._is_animated = None
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -80,6 +80,7 @@ class GifImageFile(ImageFile.ImageFile):
 | 
				
			||||||
                    break
 | 
					                    break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.__fp = self.fp  # FIXME: hack
 | 
					        self.__fp = self.fp  # FIXME: hack
 | 
				
			||||||
 | 
					        self._exclusive_fp = False
 | 
				
			||||||
        self.__rewind = self.fp.tell()
 | 
					        self.__rewind = self.fp.tell()
 | 
				
			||||||
        self._n_frames = None
 | 
					        self._n_frames = None
 | 
				
			||||||
        self._is_animated = None
 | 
					        self._is_animated = None
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -234,6 +234,7 @@ class ImImageFile(ImageFile.ImageFile):
 | 
				
			||||||
        self.__offset = offs = self.fp.tell()
 | 
					        self.__offset = offs = self.fp.tell()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.__fp = self.fp  # FIXME: hack
 | 
					        self.__fp = self.fp  # FIXME: hack
 | 
				
			||||||
 | 
					        self._exclusive_fp = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if self.rawmode[:2] == "F;":
 | 
					        if self.rawmode[:2] == "F;":
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2440,6 +2440,8 @@ def open(fp, mode="r"):
 | 
				
			||||||
            im = _open_core(fp, filename, prefix)
 | 
					            im = _open_core(fp, filename, prefix)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if im:
 | 
					    if im:
 | 
				
			||||||
 | 
					        if getattr(im, '_exclusive_fp', 'undef') is None:
 | 
				
			||||||
 | 
					            im._exclusive_fp = exclusive_fp
 | 
				
			||||||
        return im
 | 
					        return im
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if exclusive_fp:
 | 
					    if exclusive_fp:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -93,7 +93,8 @@ class ImageFile(Image.Image):
 | 
				
			||||||
            # stream
 | 
					            # stream
 | 
				
			||||||
            self.fp = fp
 | 
					            self.fp = fp
 | 
				
			||||||
            self.filename = filename
 | 
					            self.filename = filename
 | 
				
			||||||
            self._exclusive_fp = False
 | 
					            # can be overridden
 | 
				
			||||||
 | 
					            self._exclusive_fp = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            self._open()
 | 
					            self._open()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -64,6 +64,7 @@ class MicImageFile(TiffImagePlugin.TiffImageFile):
 | 
				
			||||||
            raise SyntaxError("not an MIC file; no image entries")
 | 
					            raise SyntaxError("not an MIC file; no image entries")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.__fp = self.fp
 | 
					        self.__fp = self.fp
 | 
				
			||||||
 | 
					        self._exclusive_fp = False
 | 
				
			||||||
        self.frame = 0
 | 
					        self.frame = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if len(self.images) > 1:
 | 
					        if len(self.images) > 1:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -53,6 +53,7 @@ class MpoImageFile(JpegImagePlugin.JpegImageFile):
 | 
				
			||||||
        assert self.__framecount == len(self.__mpoffsets)
 | 
					        assert self.__framecount == len(self.__mpoffsets)
 | 
				
			||||||
        del self.info['mpoffset']  # no longer needed
 | 
					        del self.info['mpoffset']  # no longer needed
 | 
				
			||||||
        self.__fp = self.fp  # FIXME: hack
 | 
					        self.__fp = self.fp  # FIXME: hack
 | 
				
			||||||
 | 
					        self._exclusive_fp = False
 | 
				
			||||||
        self.__fp.seek(self.__mpoffsets[0])  # get ready to read first frame
 | 
					        self.__fp.seek(self.__mpoffsets[0])  # get ready to read first frame
 | 
				
			||||||
        self.__frame = 0
 | 
					        self.__frame = 0
 | 
				
			||||||
        self.offset = 0
 | 
					        self.offset = 0
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -154,6 +154,7 @@ class SpiderImageFile(ImageFile.ImageFile):
 | 
				
			||||||
            ("raw", (0, 0) + self.size, offset,
 | 
					            ("raw", (0, 0) + self.size, offset,
 | 
				
			||||||
                (self.rawmode, 0, 1))]
 | 
					                (self.rawmode, 0, 1))]
 | 
				
			||||||
        self.__fp = self.fp  # FIXME: hack
 | 
					        self.__fp = self.fp  # FIXME: hack
 | 
				
			||||||
 | 
					        self._exclusive_fp = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def n_frames(self):
 | 
					    def n_frames(self):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -901,6 +901,7 @@ class TiffImageFile(ImageFile.ImageFile):
 | 
				
			||||||
        self.__first = self.__next = self.tag_v2.next
 | 
					        self.__first = self.__next = self.tag_v2.next
 | 
				
			||||||
        self.__frame = -1
 | 
					        self.__frame = -1
 | 
				
			||||||
        self.__fp = self.fp
 | 
					        self.__fp = self.fp
 | 
				
			||||||
 | 
					        self._exclusive_fp = False
 | 
				
			||||||
        self._frame_pos = []
 | 
					        self._frame_pos = []
 | 
				
			||||||
        self._n_frames = None
 | 
					        self._n_frames = None
 | 
				
			||||||
        self._is_animated = None
 | 
					        self._is_animated = None
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -116,8 +116,6 @@ class XpmImageFile(ImageFile.ImageFile):
 | 
				
			||||||
        for i in range(ysize):
 | 
					        for i in range(ysize):
 | 
				
			||||||
            s[i] = self.fp.readline()[1:xsize+1].ljust(xsize)
 | 
					            s[i] = self.fp.readline()[1:xsize+1].ljust(xsize)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.fp = None
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return b"".join(s)
 | 
					        return b"".join(s)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user