@@ -404,7 +404,7 @@ static int phar_stream_seek(php_stream *stream, zend_off_t offset, int whence, z
404404 phar_entry_data * data = (phar_entry_data * )stream -> abstract ;
405405 phar_entry_info * entry ;
406406 int res ;
407- zend_off_t temp ;
407+ zend_ulong temp ;
408408
409409 if (data -> internal_file -> link ) {
410410 entry = phar_get_link_source (data -> internal_file );
@@ -414,26 +414,28 @@ static int phar_stream_seek(php_stream *stream, zend_off_t offset, int whence, z
414414
415415 switch (whence ) {
416416 case SEEK_END :
417- temp = data -> zero + entry -> uncompressed_filesize + offset ;
417+ temp = ( zend_ulong ) data -> zero + ( zend_ulong ) entry -> uncompressed_filesize + ( zend_ulong ) offset ;
418418 break ;
419419 case SEEK_CUR :
420- temp = data -> zero + data -> position + offset ;
420+ temp = ( zend_ulong ) data -> zero + ( zend_ulong ) data -> position + ( zend_ulong ) offset ;
421421 break ;
422422 case SEEK_SET :
423- temp = data -> zero + offset ;
423+ temp = ( zend_ulong ) data -> zero + ( zend_ulong ) offset ;
424424 break ;
425425 default :
426426 temp = 0 ;
427427 }
428- if (temp > data -> zero + (zend_off_t ) entry -> uncompressed_filesize ) {
429- * newoffset = -1 ;
428+
429+ zend_off_t temp_signed = (zend_off_t ) temp ;
430+ if (temp_signed > data -> zero + (zend_off_t ) entry -> uncompressed_filesize ) {
431+ * newoffset = -1 ; /* FIXME: this will invalidate the ZEND_ASSERT(stream->position >= 0); assertion in streams.c */
430432 return -1 ;
431433 }
432- if (temp < data -> zero ) {
433- * newoffset = -1 ;
434+ if (temp_signed < data -> zero ) {
435+ * newoffset = -1 ; /* FIXME: this will invalidate the ZEND_ASSERT(stream->position >= 0); assertion in streams.c */
434436 return -1 ;
435437 }
436- res = php_stream_seek (data -> fp , temp , SEEK_SET );
438+ res = php_stream_seek (data -> fp , temp_signed , SEEK_SET );
437439 * newoffset = php_stream_tell (data -> fp ) - data -> zero ;
438440 data -> position = * newoffset ;
439441 return res ;
0 commit comments