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 @@ -39,6 +39,9 @@ PHP NEWS
39
39
- XMLReader:
40
40
. Fixed bug #73246 (XMLReader: encoding length not checked). (cmb)
41
41
42
+ - Zip:
43
+ . Fixed bug #80863 (ZipArchive::extractTo() ignores references). (cmb)
44
+
42
45
06 May 2021, PHP 8.0.6
43
46
44
47
- PDO_pgsql:
Original file line number Diff line number Diff line change @@ -2719,7 +2719,6 @@ PHP_METHOD(ZipArchive, extractTo)
2719
2719
zend_string * files_str = NULL ;
2720
2720
HashTable * files_ht = NULL ;
2721
2721
2722
- zval * zval_file = NULL ;
2723
2722
php_stream_statbuf ssb ;
2724
2723
char * pathto ;
2725
2724
size_t pathto_len ;
@@ -2756,7 +2755,8 @@ PHP_METHOD(ZipArchive, extractTo)
2756
2755
RETURN_FALSE ;
2757
2756
}
2758
2757
for (i = 0 ; i < nelems ; i ++ ) {
2759
- if ((zval_file = zend_hash_index_find (files_ht , i )) != NULL ) {
2758
+ zval * zval_file ;
2759
+ if ((zval_file = zend_hash_index_find_deref (Z_ARRVAL_P (zval_files ), i )) != NULL ) {
2760
2760
switch (Z_TYPE_P (zval_file )) {
2761
2761
case IS_LONG :
2762
2762
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