mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-31 16:07:30 +03:00 
			
		
		
		
	Merge pull request #7199 from radarhere/tiff_close
This commit is contained in:
		
						commit
						0ac3677b56
					
				|  | @ -1253,9 +1253,8 @@ class TiffImageFile(ImageFile.ImageFile): | ||||||
|         # To be nice on memory footprint, if there's a |         # To be nice on memory footprint, if there's a | ||||||
|         # file descriptor, use that instead of reading |         # file descriptor, use that instead of reading | ||||||
|         # into a string in python. |         # into a string in python. | ||||||
|         # libtiff closes the file descriptor, so pass in a dup. |  | ||||||
|         try: |         try: | ||||||
|             fp = hasattr(self.fp, "fileno") and os.dup(self.fp.fileno()) |             fp = hasattr(self.fp, "fileno") and self.fp.fileno() | ||||||
|             # flush the file descriptor, prevents error on pypy 2.4+ |             # flush the file descriptor, prevents error on pypy 2.4+ | ||||||
|             # should also eliminate the need for fp.tell |             # should also eliminate the need for fp.tell | ||||||
|             # in _seek |             # in _seek | ||||||
|  | @ -1305,18 +1304,11 @@ class TiffImageFile(ImageFile.ImageFile): | ||||||
|             # UNDONE -- so much for that buffer size thing. |             # UNDONE -- so much for that buffer size thing. | ||||||
|             n, err = decoder.decode(self.fp.read()) |             n, err = decoder.decode(self.fp.read()) | ||||||
| 
 | 
 | ||||||
|         if fp: |  | ||||||
|             try: |  | ||||||
|                 os.close(fp) |  | ||||||
|             except OSError: |  | ||||||
|                 pass |  | ||||||
| 
 |  | ||||||
|         self.tile = [] |         self.tile = [] | ||||||
|         self.readonly = 0 |         self.readonly = 0 | ||||||
| 
 | 
 | ||||||
|         self.load_end() |         self.load_end() | ||||||
| 
 | 
 | ||||||
|         # libtiff closed the fp in a, we need to close self.fp, if possible |  | ||||||
|         if close_self_fp: |         if close_self_fp: | ||||||
|             self.fp.close() |             self.fp.close() | ||||||
|             self.fp = None  # might be shared |             self.fp = None  # might be shared | ||||||
|  |  | ||||||
|  | @ -720,7 +720,16 @@ ImagingLibTiffDecode( | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  decode_err: |  decode_err: | ||||||
|  |     // TIFFClose in libtiff calls tif_closeproc and TIFFCleanup
 | ||||||
|  |     if (clientstate->fp) { | ||||||
|  |         // Pillow will manage the closing of the file rather than libtiff
 | ||||||
|  |         // So only call TIFFCleanup
 | ||||||
|  |         TIFFCleanup(tiff); | ||||||
|  |     } else { | ||||||
|  |         // When tif_closeproc refers to our custom _tiffCloseProc though,
 | ||||||
|  |         // that is fine, as it does not close the file
 | ||||||
|         TIFFClose(tiff); |         TIFFClose(tiff); | ||||||
|  |     } | ||||||
|     TRACE(("Done Decoding, Returning \n")); |     TRACE(("Done Decoding, Returning \n")); | ||||||
|     // Returning -1 here to force ImageFile.load to break, rather than
 |     // Returning -1 here to force ImageFile.load to break, rather than
 | ||||||
|     // even think about looping back around.
 |     // even think about looping back around.
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user