File tree Expand file tree Collapse file tree 3 files changed +48
-2
lines changed Expand file tree Collapse file tree 3 files changed +48
-2
lines changed Original file line number Diff line number Diff line change @@ -40,6 +40,9 @@ PHP NEWS
40
40
- XMLReader:
41
41
. Fixed bug #73246 (XMLReader: encoding length not checked). (cmb)
42
42
43
+ - Zip:
44
+ . Fixed bug #80863 (ZipArchive::extractTo() ignores references). (cmb)
45
+
43
46
06 May 2021, PHP 7.4.19
44
47
45
48
- PDO_pgsql:
Original file line number Diff line number Diff line change @@ -2616,7 +2616,6 @@ static ZIPARCHIVE_METHOD(extractTo)
2616
2616
2617
2617
zval * self = ZEND_THIS ;
2618
2618
zval * zval_files = NULL ;
2619
- zval * zval_file = NULL ;
2620
2619
php_stream_statbuf ssb ;
2621
2620
char * pathto ;
2622
2621
size_t pathto_len ;
@@ -2653,7 +2652,8 @@ static ZIPARCHIVE_METHOD(extractTo)
2653
2652
RETURN_FALSE ;
2654
2653
}
2655
2654
for (i = 0 ; i < nelems ; i ++ ) {
2656
- if ((zval_file = zend_hash_index_find (Z_ARRVAL_P (zval_files ), i )) != NULL ) {
2655
+ zval * zval_file ;
2656
+ if ((zval_file = zend_hash_index_find_deref (Z_ARRVAL_P (zval_files ), i )) != NULL ) {
2657
2657
switch (Z_TYPE_P (zval_file )) {
2658
2658
case IS_LONG :
2659
2659
break ;
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ Bug #80863 (ZipArchive::extractTo() ignores references)
3
+ --SKIPIF--
4
+ <?php
5
+ if (!extension_loaded ('zip ' )) die ("skip zip extension not available " );
6
+ ?>
7
+ --FILE--
8
+ <?php
9
+ $ archive = __DIR__ . "/bug80863.zip " ;
10
+
11
+ $ zip = new ZipArchive ();
12
+ $ zip ->open ($ archive , ZipArchive::CREATE | ZipArchive::OVERWRITE );
13
+ $ zip ->addFromString ("file1.txt " , "contents " );
14
+ $ zip ->addFromString ("file2.txt " , "contents " );
15
+ $ zip ->close ();
16
+
17
+ $ target = __DIR__ . "/bug80683 " ;
18
+ mkdir ($ target );
19
+
20
+ $ files = [
21
+ "file1.txt " ,
22
+ "file2.txt " ,
23
+ ];
24
+ // turn into references
25
+ foreach ($ files as &$ file );
26
+
27
+ $ zip = new ZipArchive ();
28
+ $ zip ->open ($ archive );
29
+ $ zip ->extractTo ($ target , $ files );
30
+ var_dump (is_file ("$ target/file1.txt " ));
31
+ var_dump (is_file ("$ target/file2.txt " ));
32
+ ?>
33
+ --EXPECT--
34
+ bool(true)
35
+ bool(true)
36
+ --CLEAN--
37
+ <?php
38
+ @unlink (__DIR__ . "/bug80863.zip " );
39
+ $ target = __DIR__ . "/bug80683 " ;
40
+ @unlink ("$ target/file1.txt " );
41
+ @unlink ("$ target/file2.txt " );
42
+ @rmdir ($ target );
43
+ ?>
You can’t perform that action at this time.
0 commit comments