@@ -175,8 +175,15 @@ ImagingSgiRleDecode(Imaging im, ImagingCodecState state, UINT8 *buf, Py_ssize_t
175175
176176 /* Get all data from File descriptor */
177177 c = (SGISTATE * )state -> context ;
178- _imaging_seek_pyFd (state -> fd , 0L , SEEK_END );
178+ if (_imaging_seek_pyFd (state -> fd , 0L , SEEK_END ) == -1 ) {
179+ state -> errcode = IMAGING_CODEC_UNKNOWN ;
180+ return -1 ;
181+ }
179182 c -> bufsize = _imaging_tell_pyFd (state -> fd );
183+ if (c -> bufsize == -1 ) {
184+ state -> errcode = IMAGING_CODEC_UNKNOWN ;
185+ return -1 ;
186+ }
180187 c -> bufsize -= SGI_HEADER_SIZE ;
181188
182189 c -> tablen = im -> bands * im -> ysize ;
@@ -194,8 +201,8 @@ ImagingSgiRleDecode(Imaging im, ImagingCodecState state, UINT8 *buf, Py_ssize_t
194201 state -> errcode = IMAGING_CODEC_MEMORY ;
195202 return -1 ;
196203 }
197- _imaging_seek_pyFd (state -> fd , SGI_HEADER_SIZE , SEEK_SET );
198- if ( _imaging_read_pyFd (state -> fd , (char * )ptr , c -> bufsize ) != c -> bufsize ) {
204+ if ( _imaging_seek_pyFd (state -> fd , SGI_HEADER_SIZE , SEEK_SET ) == -1 ||
205+ _imaging_read_pyFd (state -> fd , (char * )ptr , c -> bufsize ) != c -> bufsize ) {
199206 free (ptr );
200207 state -> errcode = IMAGING_CODEC_UNKNOWN ;
201208 return -1 ;
0 commit comments