@@ -400,7 +400,7 @@ static int phar_stream_seek(php_stream *stream, zend_off_t offset, int whence, z
400400 phar_entry_data * data = (phar_entry_data * )stream -> abstract ;
401401 phar_entry_info * entry ;
402402 int res ;
403- zend_off_t temp ;
403+ zend_ulong temp ;
404404
405405 if (data -> internal_file -> link ) {
406406 entry = phar_get_link_source (data -> internal_file );
@@ -410,26 +410,28 @@ static int phar_stream_seek(php_stream *stream, zend_off_t offset, int whence, z
410410
411411 switch (whence ) {
412412 case SEEK_END :
413- temp = data -> zero + entry -> uncompressed_filesize + offset ;
413+ temp = ( zend_ulong ) data -> zero + ( zend_ulong ) entry -> uncompressed_filesize + ( zend_ulong ) offset ;
414414 break ;
415415 case SEEK_CUR :
416- temp = data -> zero + data -> position + offset ;
416+ temp = ( zend_ulong ) data -> zero + ( zend_ulong ) data -> position + ( zend_ulong ) offset ;
417417 break ;
418418 case SEEK_SET :
419- temp = data -> zero + offset ;
419+ temp = ( zend_ulong ) data -> zero + ( zend_ulong ) offset ;
420420 break ;
421421 default :
422422 temp = 0 ;
423423 }
424- if (temp > data -> zero + (zend_off_t ) entry -> uncompressed_filesize ) {
425- * newoffset = -1 ;
424+
425+ zend_off_t temp_signed = (zend_off_t ) temp ;
426+ if (temp_signed > data -> zero + (zend_off_t ) entry -> uncompressed_filesize ) {
427+ * newoffset = -1 ; /* FIXME: this will invalidate the ZEND_ASSERT(stream->position >= 0); assertion in streams.c */
426428 return -1 ;
427429 }
428- if (temp < data -> zero ) {
429- * newoffset = -1 ;
430+ if (temp_signed < data -> zero ) {
431+ * newoffset = -1 ; /* FIXME: this will invalidate the ZEND_ASSERT(stream->position >= 0); assertion in streams.c */
430432 return -1 ;
431433 }
432- res = php_stream_seek (data -> fp , temp , SEEK_SET );
434+ res = php_stream_seek (data -> fp , temp_signed , SEEK_SET );
433435 * newoffset = php_stream_tell (data -> fp ) - data -> zero ;
434436 data -> position = * newoffset ;
435437 return res ;
0 commit comments