@@ -42,12 +42,12 @@ final class ZipReader implements ArchiveReader
42
42
private $ files = [];
43
43
44
44
/**
45
- * @var int
45
+ * @var \GMP
46
46
*/
47
- private $ cdr_ofs = 0 ;
47
+ private $ cdr_ofs ;
48
48
49
49
/**
50
- * @var int
50
+ * @var \GMP
51
51
*/
52
52
private $ cdr_len ;
53
53
@@ -57,6 +57,8 @@ final class ZipReader implements ArchiveReader
57
57
public function __construct (Archive $ archive )
58
58
{
59
59
$ this ->archive = $ archive ;
60
+ $ this ->cdr_ofs = \gmp_init (0 );
61
+ $ this ->cdr_len = \gmp_init (0 );
60
62
}
61
63
62
64
/**
@@ -272,7 +274,7 @@ private function completeResourceStream(): \SplTempFileObject
272
274
private function addToCdr (string $ name , int $ method , int $ crc , string $ zlen , string $ len , int $ rec_len , int $ genb = 0 , int $ fattr = 0x20 )
273
275
{
274
276
$ this ->files [] = [$ name , $ method , $ crc , $ zlen , $ len , $ this ->cdr_ofs , $ genb , $ fattr ];
275
- $ this ->cdr_ofs += $ rec_len ;
277
+ $ this ->cdr_ofs = \gmp_add ( $ this -> cdr_ofs , $ rec_len) ;
276
278
}
277
279
278
280
/**
@@ -342,7 +344,7 @@ private function addCdrFile(array $args): \SplTempFileObject
342
344
// pack fields, then append name and comment
343
345
$ ret = PackHelper::packFields ($ fields ) . $ name . $ extra . $ comment ;
344
346
345
- $ this ->cdr_len + = \strlen ($ ret );
347
+ $ this ->cdr_len = \gmp_add ( $ this -> cdr_len , \ strlen ($ ret) );
346
348
347
349
$ stream = new \SplTempFileObject ();
348
350
$ stream ->fwrite ($ ret );
@@ -395,7 +397,7 @@ private function addCdrEofZip64(): \SplTempFileObject
395
397
*/
396
398
private function addCdrEofLocatorZip64 (): \SplTempFileObject
397
399
{
398
- list ($ cdr_ofs_low , $ cdr_ofs_high ) = PackHelper::int64Split ($ this ->cdr_len + $ this ->cdr_ofs );
400
+ list ($ cdr_ofs_low , $ cdr_ofs_high ) = PackHelper::int64Split (\gmp_add ( $ this ->cdr_len , $ this ->cdr_ofs ) );
399
401
400
402
$ fields = [ // (from V,F of APPNOTE.TXT)
401
403
['V ' , 0x07064b50 ], // zip64 end of central dir locator signature
@@ -454,7 +456,7 @@ private function addCdrEof(): \SplTempFileObject
454
456
private function clear (): void
455
457
{
456
458
$ this ->files = [];
457
- $ this ->cdr_ofs = 0 ;
458
- $ this ->cdr_len = 0 ;
459
+ $ this ->cdr_ofs = \gmp_init ( 0 ) ;
460
+ $ this ->cdr_len = \gmp_init ( 0 ) ;
459
461
}
460
462
}
0 commit comments