]> granicus.if.org Git - php/commitdiff
begin work on making phar php6-ready
authorGreg Beaver <cellog@php.net>
Fri, 24 Jul 2009 23:53:24 +0000 (23:53 +0000)
committerGreg Beaver <cellog@php.net>
Fri, 24 Jul 2009 23:53:24 +0000 (23:53 +0000)
18 files changed:
ext/phar/dirstream.c
ext/phar/phar.c
ext/phar/phar_internal.h
ext/phar/phar_object.c
ext/phar/stream.c
ext/phar/tests/019bU.phpt
ext/phar/tests/bug46032.phpt
ext/phar/tests/create_new_and_modify.phpt
ext/phar/tests/fopen_edgecases2.phpt
ext/phar/tests/front.phar.phpt
ext/phar/tests/ini_set.phpt
ext/phar/tests/ini_setU.phpt [deleted file]
ext/phar/tests/phar_buildfromdirectory2.phpt
ext/phar/tests/phar_buildfromiterator10.phpt
ext/phar/tests/phar_buildfromiterator10U.phpt [deleted file]
ext/phar/tests/phar_bz2.phpt
ext/phar/tests/phar_bz2U.phpt [deleted file]
ext/phar/util.c

index f466b4a13f6596457b72f662971e582d4028f12e..c1758d42059de7d784bafcbb115d281e7a78db17 100644 (file)
@@ -112,11 +112,13 @@ static size_t phar_dir_read(php_stream *stream, char *buf, size_t count TSRMLS_D
        to_read = MIN(keylen, count);
 
        if (to_read == 0 || count < keylen) {
+               PHAR_STR_FREE(str_key);
                return 0;
        }
 
        memset(buf, 0, sizeof(php_stream_dirent));
        memcpy(((php_stream_dirent *) buf)->d_name, str_key, to_read);
+       PHAR_STR_FREE(str_key);
        ((php_stream_dirent *) buf)->d_name[to_read + 1] = '\0';
 
        return sizeof(php_stream_dirent);
@@ -217,6 +219,7 @@ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest TSRMLS_DC)
 
                if (keylen <= (uint)dirlen) {
                        if (keylen < (uint)dirlen || !strncmp(str_key, dir, dirlen)) {
+                               PHAR_STR_FREE(str_key);
                                if (SUCCESS != zend_hash_move_forward(manifest)) {
                                        break;
                                }
@@ -227,6 +230,7 @@ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest TSRMLS_DC)
                if (*dir == '/') {
                        /* root directory */
                        if (keylen >= sizeof(".phar")-1 && !memcmp(str_key, ".phar", sizeof(".phar")-1)) {
+                               PHAR_STR_FREE(str_key);
                                /* do not add any magic entries to this directory */
                                if (SUCCESS != zend_hash_move_forward(manifest)) {
                                        break;
@@ -246,16 +250,19 @@ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest TSRMLS_DC)
                                entry[keylen] = '\0';
                        }
 
+                       PHAR_STR_FREE(str_key);
                        goto PHAR_ADD_ENTRY;
                } else {
                        if (0 != memcmp(str_key, dir, dirlen)) {
                                /* entry in directory not found */
+                               PHAR_STR_FREE(str_key);
                                if (SUCCESS != zend_hash_move_forward(manifest)) {
                                        break;
                                }
                                continue;
                        } else {
                                if (str_key[dirlen] != '/') {
+                                       PHAR_STR_FREE(str_key);
                                        if (SUCCESS != zend_hash_move_forward(manifest)) {
                                                break;
                                        }
@@ -282,6 +289,7 @@ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest TSRMLS_DC)
                        entry[keylen - dirlen - 1] = '\0';
                        keylen = keylen - dirlen - 1;
                }
+               PHAR_STR_FREE(str_key);
 PHAR_ADD_ENTRY:
                if (keylen) {
                        phar_add_empty(data, entry, keylen);
@@ -400,12 +408,14 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, char *path, char
                                                &phar->manifest, &key, &keylen, &unused, 0, NULL)) {
                                PHAR_STR(key, str_key);
                                if (keylen > (uint)i_len && 0 == memcmp(str_key, internal_file, i_len)) {
+                                       PHAR_STR_FREE(str_key);
                                        /* directory found */
                                        internal_file = estrndup(internal_file,
                                                        i_len);
                                        php_url_free(resource);
                                        return phar_make_dirstream(internal_file, &phar->manifest TSRMLS_CC);
                                }
+                               PHAR_STR_FREE(str_key);
                        }
 
                        if (SUCCESS != zend_hash_move_forward(&phar->manifest)) {
@@ -635,6 +645,7 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, char *url, int options, php_
                        if (key_len > path_len && 
                                memcmp(str_key, resource->path+1, path_len) == 0 && 
                                IS_SLASH(str_key[path_len])) {
+                               PHAR_STR_FREE(str_key);
                                php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "phar error: Directory not empty");
                                if (entry->is_temp_dir) {
                                        efree(entry->filename);
@@ -643,6 +654,7 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, char *url, int options, php_
                                php_url_free(resource);
                                return 0;
                        }
+                       PHAR_STR_FREE(str_key);
                }
 
                for (zend_hash_internal_pointer_reset(&phar->virtual_dirs);
@@ -654,6 +666,7 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, char *url, int options, php_
                        if (key_len > path_len && 
                                memcmp(str_key, resource->path+1, path_len) == 0 && 
                                IS_SLASH(str_key[path_len])) {
+                               PHAR_STR_FREE(str_key);
                                php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "phar error: Directory not empty");
                                if (entry->is_temp_dir) {
                                        efree(entry->filename);
@@ -662,6 +675,7 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, char *url, int options, php_
                                php_url_free(resource);
                                return 0;
                        }
+                       PHAR_STR_FREE(str_key);
                }
        }
 
index ec441ee04a867cd5d7d8bd8e5404771566286bf2..877a6663c98679346214c98f8d8c17d3832bbf50 100644 (file)
@@ -1972,11 +1972,13 @@ woohoo:
 
                                if (keylen > (uint) filename_len) {
                                        zend_hash_move_forward(&(PHAR_GLOBALS->phar_fname_map));
+                                       PHAR_STR_FREE(str_key);
                                        continue;
                                }
 
                                if (!memcmp(filename, str_key, keylen) && ((uint)filename_len == keylen
                                        || filename[keylen] == '/' || filename[keylen] == '\0')) {
+                                       PHAR_STR_FREE(str_key);
                                        if (FAILURE == zend_hash_get_current_data(&(PHAR_GLOBALS->phar_fname_map), (void **) &pphar)) {
                                                break;
                                        }
@@ -1984,6 +1986,7 @@ woohoo:
                                        goto woohoo;
                                }
 
+                               PHAR_STR_FREE(str_key);
                                zend_hash_move_forward(&(PHAR_GLOBALS->phar_fname_map));
                        }
 
@@ -1999,17 +2002,20 @@ woohoo:
 
                                        if (keylen > (uint) filename_len) {
                                                zend_hash_move_forward(&cached_phars);
+                                               PHAR_STR_FREE(str_key);
                                                continue;
                                        }
 
                                        if (!memcmp(filename, str_key, keylen) && ((uint)filename_len == keylen
                                                || filename[keylen] == '/' || filename[keylen] == '\0')) {
+                                               PHAR_STR_FREE(str_key);
                                                if (FAILURE == zend_hash_get_current_data(&cached_phars, (void **) &pphar)) {
                                                        break;
                                                }
                                                *ext_str = filename + (keylen - (*pphar)->ext_len);
                                                goto woohoo;
                                        }
+                                       PHAR_STR_FREE(str_key);
                                        zend_hash_move_forward(&cached_phars);
                                }
                        }
index 12596706909cabb0c0d79a7e4c692f146925b29c..7ebba2e51321b99451e281afa272d966ef1e3e30 100755 (executable)
@@ -544,12 +544,15 @@ typedef zstr phar_zstr;
        spprintf(&b, 0, "%s", a.s);
 #define PHAR_ZSTR(a, b)        \
        b = ZSTR(a);
+#define PHAR_STR_FREE(a) \
+       efree(a);
 #else
 typedef char *phar_zstr;
 #define PHAR_STR(a, b) \
        b = a;
 #define PHAR_ZSTR(a, b)        \
        b = a;
+#define PHAR_STR_FREE(a)
 #endif
 
 BEGIN_EXTERN_C()
index 2bc2f4394c01875b103cbea7ad4ec8477653b17c..247e8e1ef8bb1de05433a21703503f061efd474b 100755 (executable)
@@ -1482,6 +1482,7 @@ static int phar_build(zend_object_iterator *iter, void *puser TSRMLS_DC) /* {{{
                                        spprintf(&str_key, 0, "%s", key);
 #else
                                        spprintf(&str_key, 0, "%v", key);
+                                       ezfree(key);
 #endif
                                } else {
                                        PHAR_STR(key, str_key);
@@ -1614,6 +1615,7 @@ phar_spl_fileinfo:
                                spprintf(&str_key, 0, "%s", key);
 #else
                                spprintf(&str_key, 0, "%v", key);
+                               ezfree(key);
 #endif
                        } else {
                                PHAR_STR(key, str_key);
@@ -4774,7 +4776,11 @@ PHP_METHOD(PharFileInfo, getContent)
 
        phar_seek_efp(link, 0, SEEK_SET, 0, 0 TSRMLS_CC);
        Z_TYPE_P(return_value) = IS_STRING;
+#if PHP_MAJOR_VERSION >= 6
+       Z_STRLEN_P(return_value) = php_stream_copy_to_mem(fp, (void **) &(Z_STRVAL_P(return_value)), link->uncompressed_filesize, 0);
+#else
        Z_STRLEN_P(return_value) = php_stream_copy_to_mem(fp, &(Z_STRVAL_P(return_value)), link->uncompressed_filesize, 0);
+#endif
 
        if (!Z_STRVAL_P(return_value)) {
                Z_STRVAL_P(return_value) = estrndup("", 0);
index bc38f5e75acc5d8502a9f1e7d82e50d968ffac59..e8d80ce68431cded36b8f04f4fd72a17c9377e5d 100644 (file)
@@ -635,6 +635,7 @@ static int phar_wrapper_stat(php_stream_wrapper *wrapper, char *url, int flags,
                        PHAR_STR(key, str_key);
                        if ((int)keylen >= internal_file_len || strncmp(str_key, internal_file, keylen)) {
                                zend_hash_move_forward_ex(&phar->mounted_dirs, &pos);
+                               PHAR_STR_FREE(str_key);
                                continue;
                        } else {
                                char *test;
@@ -642,8 +643,10 @@ static int phar_wrapper_stat(php_stream_wrapper *wrapper, char *url, int flags,
                                php_stream_statbuf ssbi;
 
                                if (SUCCESS != zend_hash_find(&phar->manifest, str_key, keylen, (void **) &entry)) {
+                                       PHAR_STR_FREE(str_key);
                                        goto free_resource;
                                }
+                               PHAR_STR_FREE(str_key);
                                if (!entry->tmp || !entry->is_mounted) {
                                        goto free_resource;
                                }
@@ -939,6 +942,7 @@ static int phar_wrapper_rename(php_stream_wrapper *wrapper, char *url_from, char
                                zend_hash_update_current_key_ex(&phar->manifest, key_type, new_key, new_key_len, 0, HASH_UPDATE_KEY_ANYWAY, NULL);
 #endif
                        }
+                       PHAR_STR_FREE(str_key);
                }
 
                for (zend_hash_internal_pointer_reset(&phar->virtual_dirs);
@@ -965,6 +969,7 @@ static int phar_wrapper_rename(php_stream_wrapper *wrapper, char *url_from, char
 #endif
                                efree(new_str_key);
                        }
+                       PHAR_STR_FREE(str_key);
                }
 
                for (zend_hash_internal_pointer_reset(&phar->mounted_dirs);
@@ -992,6 +997,7 @@ static int phar_wrapper_rename(php_stream_wrapper *wrapper, char *url_from, char
 #endif
                                efree(new_str_key);
                        }
+                       PHAR_STR_FREE(str_key);
                }
        }
 
index c0864aa2ceef4a73f2c88653358c85db1709adc9..68e4ea3b2fe728a41605f6b96e6972de5f30e1c6 100644 (file)
@@ -9,7 +9,6 @@ if (version_compare(PHP_VERSION, "6.0", "<")) die("skip Unicode support required
 phar.require_hash=0
 --FILE--
 <?php
-
 $fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
 $pname = 'phar://' . $fname;
 $file = b"<?php
@@ -21,7 +20,6 @@ $files['a'] = 'a';
 $files['b/a'] = 'b';
 $files['b/c/d'] = 'c';
 $files['bad/c'] = 'd';
-
 include 'files/phar_test.inc';
 include $fname;
 
index 4ff1026b52c70d7879d8e27522185db3316f8564..61ed608e3ff85e4c487581cb996045a18ab9c3dc 100644 (file)
@@ -24,8 +24,8 @@ new phardata('0000000000000000000');
 ?>
 ===DONE===
 --EXPECTF--
-string(%d) "%smytest"
-string(%d) "%smytest"
+%unicode|string%(%d) "%smytest"
+%unicode|string%(%d) "%smytest"
 
 Fatal error: Uncaught exception 'UnexpectedValueException' with message 'Cannot create phar '0000000000000000000', file extension (or combination) not recognised' in %sbug46032.php:%d
 Stack trace:
index 66587de023f9da97a36f09b076c4ecc3cde3a17a..c9b5d43d6dd176d0bfe0632df3fe33488dc6e36f 100755 (executable)
@@ -40,8 +40,8 @@ include $pname . '/b.php';
 <?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
 --EXPECTF--
 brand new!
-string(40) "%s"
-string(40) "%s"
+%unicode|string%(40) "%s"
+%unicode|string%(40) "%s"
 bool(true)
 modified!
 another!
index c606024adab915bd9a350e5beed6f4aa0a7a9e41..fb998e2bc1152024177bad5861a55ca776ea193f 100644 (file)
@@ -2,6 +2,7 @@
 Phar: test edge cases of fopen() function interception #2
 --SKIPIF--
 <?php if (!extension_loaded("phar")) die("skip"); ?>
+<?php if (version_compare(PHP_VERSION, '6.0', '>=')) die('skip parameter parsing changed in 6.0'); ?>
 --INI--
 phar.readonly=0
 --FILE--
@@ -12,14 +13,14 @@ $pname = 'phar://' . $fname;
 
 fopen(array(), 'r');
 chdir(dirname(__FILE__));
-file_put_contents($fname, "blah\n");
-file_put_contents("foob", "test\n");
+file_put_contents($fname, b"blah\n");
+file_put_contents("foob", b"test\n");
 $a = fopen($fname, 'rb');
 echo fread($a, 1000);
 fclose($a);
 unlink($fname);
 mkdir($pname . '/oops');
-file_put_contents($pname . '/foo/hi', '<?php
+file_put_contents($pname . '/foo/hi', b'<?php
 $context = stream_context_create();
 $a = fopen("foob", "rb", false, $context);
 echo fread($a, 1000);
index bab8ada0fdd357b9e18361a291ce2c2eabf3b269..ce961c200f0256aba80711017243b51c48f4b55c 100644 (file)
@@ -13,7 +13,7 @@ Content-type: text/html; charset=UTF-8
 --FILE_EXTERNAL--
 files/blog.phar
 --EXPECTF--
-string(%d) "<xml version="1.0" encoding="UTF-8">
+%string|unicode%(%d) "<xml version="1.0" encoding="UTF-8">
 <config>
  <database>
   <host>localhost</name>
index 01dc995891df9c43df024e1092de52b18374434b..13ec88ab11c937c5e6bfbcdacd501ac0a8faaa8d 100644 (file)
@@ -3,7 +3,6 @@ Phar: test ini_set with readonly and require_hash enabled
 --SKIPIF--
 <?php
 if (!extension_loaded("phar")) die("skip");
-if (version_compare(PHP_VERSION, "6.0", ">")) die("skip pre-unicode version of PHP required");
 ?>
 --INI--
 phar.require_hash=1
@@ -20,12 +19,12 @@ var_dump(ini_get('phar.require_hash'));
 var_dump(ini_get('phar.readonly'));
 __HALT_COMPILER();
 ?>
---EXPECT--
-string(1) "1"
-string(1) "1"
-string(1) "1"
-string(1) "1"
+--EXPECTF--
+%unicode|string%(1) "1"
+%unicode|string%(1) "1"
+%unicode|string%(1) "1"
+%unicode|string%(1) "1"
 bool(false)
 bool(false)
-string(1) "1"
-string(1) "1"
+%unicode|string%(1) "1"
+%unicode|string%(1) "1"
diff --git a/ext/phar/tests/ini_setU.phpt b/ext/phar/tests/ini_setU.phpt
deleted file mode 100644 (file)
index 470040f..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
---TEST--
-Phar: test ini_set with readonly and require_hash enabled
---SKIPIF--
-<?php
-if (!extension_loaded("phar")) die("skip");
-if (version_compare(PHP_VERSION, "6.0", "<")) die("skip Unicode support required");
-?>
---INI--
-phar.require_hash=1
-phar.readonly=1
---FILE--
-<?php
-var_dump(ini_set('phar.require_hash', 1));
-var_dump(ini_set('phar.readonly', 1));
-var_dump(ini_get('phar.require_hash'));
-var_dump(ini_get('phar.readonly'));
-var_dump(ini_set('phar.require_hash', 0));
-var_dump(ini_set('phar.readonly', 0));
-var_dump(ini_get('phar.require_hash'));
-var_dump(ini_get('phar.readonly'));
-__HALT_COMPILER();
-?>
---EXPECT--
-unicode(1) "1"
-unicode(1) "1"
-unicode(1) "1"
-unicode(1) "1"
-unicode(1) "1"
-unicode(1) "1"
-unicode(1) "1"
-unicode(1) "1"
index 6c67f208af04a78187035daec6484a01c72e50b7..3b9e4204085e57b14e14d92067d5482311d6135d 100644 (file)
@@ -22,6 +22,6 @@ unlink(dirname(__FILE__) . '/buildfromdirectory.phar');
 __HALT_COMPILER();
 ?>
 --EXPECTF--
-%s(24) "UnexpectedValueException"
+%unicode|string%(%d) "%s"
 RecursiveDirectoryIterator::__construct(1): failed to open dir: No such file or directory
 ===DONE===
index 4dc3af7ccaa3525938eabfe7f499816444f4a787..02c31e567f2d92e7d488cb6dce45e8d3ff83bdc4 100644 (file)
@@ -3,7 +3,6 @@ Phar::buildFromIterator() RegexIterator(RecursiveIteratorIterator), SplFileInfo
 --SKIPIF--
 <?php
 if (!extension_loaded("phar")) die("skip");
-if (version_compare(PHP_VERSION, "6.0", ">")) die("skip pre-unicode version of PHP required");
 ?>
 --INI--
 phar.require_hash=0
@@ -32,74 +31,74 @@ __HALT_COMPILER();
 --EXPECTF--
 array(35) {
   ["phar_ctx_001.phpt"]=>
-  string(%d) "%sphar_ctx_001.phpt"
+  %unicode|string%(%d) "%sphar_ctx_001.phpt"
   ["phar_get_supported_signatures_001.phpt"]=>
-  string(%d) "%sphar_get_supported_signatures_001.phpt"
+  %unicode|string%(%d) "%sphar_get_supported_signatures_001.phpt"
   ["phar_get_supported_signatures_002.phpt"]=>
-  string(%d) "%sphar_get_supported_signatures_002.phpt"
+  %unicode|string%(%d) "%sphar_get_supported_signatures_002.phpt"
   ["phar_oo_001.phpt"]=>
-  string(%d) "%sphar_oo_001.phpt"
+  %unicode|string%(%d) "%sphar_oo_001.phpt"
   ["phar_oo_002.phpt"]=>
-  string(%d) "%sphar_oo_002.phpt"
+  %unicode|string%(%d) "%sphar_oo_002.phpt"
   ["phar_oo_003.phpt"]=>
-  string(%d) "%sphar_oo_003.phpt"
+  %unicode|string%(%d) "%sphar_oo_003.phpt"
   ["phar_oo_004.phpt"]=>
-  string(%d) "%sphar_oo_004.phpt"
+  %unicode|string%(%d) "%sphar_oo_004.phpt"
   ["phar_oo_005.phpt"]=>
-  string(%d) "%sphar_oo_005.phpt"
+  %unicode|string%(%d) "%sphar_oo_005.phpt"
   ["phar_oo_006.phpt"]=>
-  string(%d) "%sphar_oo_006.phpt"
+  %unicode|string%(%d) "%sphar_oo_006.phpt"
   ["phar_oo_007.phpt"]=>
-  string(%d) "%sphar_oo_007.phpt"
+  %unicode|string%(%d) "%sphar_oo_007.phpt"
   ["phar_oo_008.phpt"]=>
-  string(%d) "%sphar_oo_008.phpt"
+  %unicode|string%(%d) "%sphar_oo_008.phpt"
   ["phar_oo_009.phpt"]=>
-  string(%d) "%sphar_oo_009.phpt"
+  %unicode|string%(%d) "%sphar_oo_009.phpt"
   ["phar_oo_010.phpt"]=>
-  string(%d) "%sphar_oo_010.phpt"
+  %unicode|string%(%d) "%sphar_oo_010.phpt"
   ["phar_oo_011.phpt"]=>
-  string(%d) "%sphar_oo_011.phpt"
+  %unicode|string%(%d) "%sphar_oo_011.phpt"
   ["phar_oo_012.phpt"]=>
-  string(%d) "%sphar_oo_012.phpt"
+  %unicode|string%(%d) "%sphar_oo_012.phpt"
   ["phar_oo_compressed_001.phpt"]=>
-  string(%d) "%sphar_oo_compressed_001.phpt"
+  %unicode|string%(%d) "%sphar_oo_compressed_001.phpt"
   ["phar_oo_compressed_002.phpt"]=>
-  string(%d) "%sphar_oo_compressed_002.phpt"
+  %unicode|string%(%d) "%sphar_oo_compressed_002.phpt"
   ["phpinfo_001.phpt"]=>
-  string(%d) "%sphpinfo_001.phpt"
+  %unicode|string%(%d) "%sphpinfo_001.phpt"
   ["phpinfo_002.phpt"]=>
-  string(%d) "%sphpinfo_002.phpt"
+  %unicode|string%(%d) "%sphpinfo_002.phpt"
   ["phpinfo_003.phpt"]=>
-  string(%d) "%sphpinfo_003.phpt"
+  %unicode|string%(%d) "%sphpinfo_003.phpt"
   ["phpinfo_004.phpt"]=>
-  string(%d) "%sphpinfo_004.phpt"
+  %unicode|string%(%d) "%sphpinfo_004.phpt"
   ["tar/tar_001.phpt"]=>
-  string(%d) "%star%ctar_001.phpt"
+  %unicode|string%(%d) "%star%ctar_001.phpt"
   ["tar/tar_002.phpt"]=>
-  string(%d) "%star%ctar_002.phpt"
+  %unicode|string%(%d) "%star%ctar_002.phpt"
   ["tar/tar_003.phpt"]=>
-  string(%d) "%star%ctar_003.phpt"
+  %unicode|string%(%d) "%star%ctar_003.phpt"
   ["tar/tar_004.phpt"]=>
-  string(%d) "%star%ctar_004.phpt"
+  %unicode|string%(%d) "%star%ctar_004.phpt"
   ["zip/corrupt_001.phpt"]=>
-  string(%d) "%szip%ccorrupt_001.phpt"
+  %unicode|string%(%d) "%szip%ccorrupt_001.phpt"
   ["zip/corrupt_002.phpt"]=>
-  string(%d) "%szip%ccorrupt_002.phpt"
+  %unicode|string%(%d) "%szip%ccorrupt_002.phpt"
   ["zip/corrupt_003.phpt"]=>
-  string(%d) "%szip%ccorrupt_003.phpt"
+  %unicode|string%(%d) "%szip%ccorrupt_003.phpt"
   ["zip/corrupt_004.phpt"]=>
-  string(%d) "%szip%ccorrupt_004.phpt"
+  %unicode|string%(%d) "%szip%ccorrupt_004.phpt"
   ["zip/corrupt_005.phpt"]=>
-  string(%d) "%szip%ccorrupt_005.phpt"
+  %unicode|string%(%d) "%szip%ccorrupt_005.phpt"
   ["zip/corrupt_006.phpt"]=>
-  string(%d) "%szip%ccorrupt_006.phpt"
+  %unicode|string%(%d) "%szip%ccorrupt_006.phpt"
   ["zip/corrupt_007.phpt"]=>
-  string(%d) "%szip%ccorrupt_007.phpt"
+  %unicode|string%(%d) "%szip%ccorrupt_007.phpt"
   ["zip/corrupt_008.phpt"]=>
-  string(%d) "%szip%ccorrupt_008.phpt"
+  %unicode|string%(%d) "%szip%ccorrupt_008.phpt"
   ["zip/corrupt_009.phpt"]=>
-  string(%d) "%szip%ccorrupt_009.phpt"
+  %unicode|string%(%d) "%szip%ccorrupt_009.phpt"
   ["zip/corrupt_010.phpt"]=>
-  string(%d) "%szip%ccorrupt_010.phpt"
+  %unicode|string%(%d) "%szip%ccorrupt_010.phpt"
 }
 ===DONE===
diff --git a/ext/phar/tests/phar_buildfromiterator10U.phpt b/ext/phar/tests/phar_buildfromiterator10U.phpt
deleted file mode 100644 (file)
index 74f4159..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
---TEST--
-Phar::buildFromIterator() RegexIterator(RecursiveIteratorIterator), SplFileInfo as current
---SKIPIF--
-<?php
-if (!extension_loaded("phar")) die("skip");
-if (version_compare(PHP_VERSION, "6.0", "<")) die("skip Unicode support required");
-?>
---INI--
-phar.require_hash=0
-phar.readonly=0
---FILE--
-<?php
-try {
-       chdir(dirname(__FILE__));
-       $phar = new Phar(dirname(__FILE__) . '/buildfromiterator.phar');
-       $dir = new RecursiveDirectoryIterator('.');
-       $iter = new RecursiveIteratorIterator($dir);
-       $a = $phar->buildFromIterator(new RegexIterator($iter, '/_\d{3}\.phpt$/'), dirname(__FILE__) . DIRECTORY_SEPARATOR);
-       asort($a);
-       var_dump($a);
-} catch (Exception $e) {
-       var_dump(get_class($e));
-       echo $e->getMessage() . "\n";
-}
-?>
-===DONE===
---CLEAN--
-<?php 
-unlink(dirname(__FILE__) . '/buildfromiterator.phar');
-__HALT_COMPILER();
-?>
---EXPECTF--
-array(33) {
-  ["phar_ctx_001.phpt"]=>
-  unicode(%d) "%sphar_ctx_001.phpt"
-  ["phar_get_supported_signatures_001.phpt"]=>
-  unicode(%d) "%sphar_get_supported_signatures_001.phpt"
-  ["phar_get_supported_signatures_002.phpt"]=>
-  unicode(%d) "%sphar_get_supported_signatures_002.phpt"
-  ["phar_oo_001.phpt"]=>
-  unicode(%d) "%sphar_oo_001.phpt"
-  ["phar_oo_002.phpt"]=>
-  unicode(%d) "%sphar_oo_002.phpt"
-  ["phar_oo_003.phpt"]=>
-  unicode(%d) "%sphar_oo_003.phpt"
-  ["phar_oo_004.phpt"]=>
-  unicode(%d) "%sphar_oo_004.phpt"
-  ["phar_oo_005.phpt"]=>
-  unicode(%d) "%sphar_oo_005.phpt"
-  ["phar_oo_006.phpt"]=>
-  unicode(%d) "%sphar_oo_006.phpt"
-  ["phar_oo_007.phpt"]=>
-  unicode(%d) "%sphar_oo_007.phpt"
-  ["phar_oo_008.phpt"]=>
-  unicode(%d) "%sphar_oo_008.phpt"
-  ["phar_oo_009.phpt"]=>
-  unicode(%d) "%sphar_oo_009.phpt"
-  ["phar_oo_010.phpt"]=>
-  unicode(%d) "%sphar_oo_010.phpt"
-  ["phar_oo_011.phpt"]=>
-  unicode(%d) "%sphar_oo_011.phpt"
-  ["phar_oo_012.phpt"]=>
-  unicode(%d) "%sphar_oo_012.phpt"
-  ["phar_oo_compressed_001.phpt"]=>
-  unicode(%d) "%sphar_oo_compressed_001.phpt"
-  ["phar_oo_compressed_002.phpt"]=>
-  unicode(%d) "%sphar_oo_compressed_002.phpt"
-  ["phpinfo_001.phpt"]=>
-  unicode(%d) "%sphpinfo_001.phpt"
-  ["phpinfo_002.phpt"]=>
-  unicode(%d) "%sphpinfo_002.phpt"
-  ["phpinfo_003.phpt"]=>
-  unicode(%d) "%sphpinfo_003.phpt"
-  ["phpinfo_004.phpt"]=>
-  unicode(%d) "%sphpinfo_004.phpt"
-  ["tar/tar_001.phpt"]=>
-  unicode(%d) "%star%ctar_001.phpt"
-  ["tar/tar_002.phpt"]=>
-  unicode(%d) "%star%ctar_002.phpt"
-  ["tar/tar_003.phpt"]=>
-  unicode(%d) "%star%ctar_003.phpt"
-  ["tar/tar_004.phpt"]=>
-  unicode(%d) "%star%ctar_004.phpt"
-  ["zip/corrupt_001.phpt"]=>
-  unicode(%d) "%szip%ccorrupt_001.phpt"
-  ["zip/corrupt_002.phpt"]=>
-  unicode(%d) "%szip%ccorrupt_002.phpt"
-  ["zip/corrupt_003.phpt"]=>
-  unicode(%d) "%szip%ccorrupt_003.phpt"
-  ["zip/corrupt_004.phpt"]=>
-  unicode(%d) "%szip%ccorrupt_004.phpt"
-  ["zip/corrupt_005.phpt"]=>
-  unicode(%d) "%szip%ccorrupt_005.phpt"
-  ["zip/corrupt_006.phpt"]=>
-  unicode(%d) "%szip%ccorrupt_006.phpt"
-  ["zip/corrupt_007.phpt"]=>
-  unicode(%d) "%szip%ccorrupt_007.phpt"
-  ["zip/corrupt_008.phpt"]=>
-  unicode(%d) "%szip%ccorrupt_008.phpt"
-}
-===DONE===
index 6e05663d53004558034b4d10962e17ef2e31ab1a..0e6e3ecb541f980a384584590b7d6d4fb47d64d9 100644 (file)
@@ -3,7 +3,6 @@ Phar: bzipped phar
 --SKIPIF--
 <?php
 if (!extension_loaded("phar")) die("skip");
-if (version_compare(PHP_VERSION, "6.0", ">")) die("skip pre-unicode version of PHP required");
 if (!extension_loaded("spl")) die("skip SPL not available");
 if (!extension_loaded("bz2")) die("skip bz2 not available");
 ?>
@@ -56,8 +55,8 @@ echo $e->getMessage(),"\n";
 @unlink(dirname(__FILE__) . '/phar_bz2.2.phar');
 ?>
 --EXPECTF--
-string(9) "it worked"
-string(%d) "phar://%sphar_bz2.phar/tar_004.php"
+%unicode|string%(9) "it worked"
+%unicode|string%(%d) "phar://%sphar_bz2.phar/tar_004.php"
 bool(true)
 bool(true)
 
diff --git a/ext/phar/tests/phar_bz2U.phpt b/ext/phar/tests/phar_bz2U.phpt
deleted file mode 100644 (file)
index 62f5c58..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
---TEST--
-Phar: bzipped phar
---SKIPIF--
-<?php
-if (!extension_loaded("phar")) die("skip");
-if (version_compare(PHP_VERSION, "6.0", "<")) die("skip Unicode support required");
-if (!extension_loaded("spl")) die("skip SPL not available");
-if (!extension_loaded("bz2")) die("skip bz2 not available");
-?>
---INI--
-phar.readonly=0
-phar.require_hash=0
---FILE--
-<?php
-$fname = dirname(__FILE__) . '/phar_bz2U.phar';
-$pname = 'phar://' . $fname;
-$fname2 = dirname(__FILE__) . '/phar_bz2U.2.phar';
-$pname2 = 'phar://' . $fname2;
-
-$file = '<?php
-Phar::mapPhar();
-var_dump("it worked");
-include "phar://" . __FILE__ . "/tar_004.php";
-__HALT_COMPILER();';
-
-$files = array();
-$files['tar_004.php']   = '<?php var_dump(__FILE__);';
-$files['internal/file/here']   = "hi there!\n";
-$files['internal/dir/'] = '';
-$files['dir/'] = '';
-$bz2 = true;
-
-include 'files/phar_test.inc';
-
-include $fname;
-
-$a = new Phar($fname);
-$a['test'] = 'hi';
-copy($fname, $fname2);
-$a->setAlias('another');
-$b = new Phar($fname2);
-var_dump($b->isFileFormat(Phar::PHAR));
-var_dump($b->isCompressed() == Phar::BZ2);
-// additional code coverage
-$b->isFileFormat(array());
-try {
-$b->isFileFormat(25);
-} catch (Exception $e) {
-echo $e->getMessage(),"\n";
-}
-?>
-===DONE===
---CLEAN--
-<?php
-@unlink(dirname(__FILE__) . '/phar_bz2U.phar');
-@unlink(dirname(__FILE__) . '/phar_bz2U.2.phar');
-?>
---EXPECTF--
-unicode(9) "it worked"
-unicode(%d) "phar://%sphar_bz2U.phar/tar_004.php"
-bool(true)
-bool(true)
-
-Warning: Phar::isFileFormat() expects parameter 1 to be long, array given in %sphar_bz2U.php on line %d
-Unknown file format specified
-===DONE===
index 434a37e7f03b112589e019208e7b3c780430d6b8..0aa2bd7bb9df2f77488041c8b74755cf6a9f0704 100644 (file)
@@ -1551,6 +1551,7 @@ phar_entry_info *phar_get_entry_info_dir(phar_archive_data *phar, char *path, in
                        PHAR_STR(key, str_key);
 
                        if ((int)keylen >= path_len || strncmp(str_key, path, keylen)) {
+                               PHAR_STR_FREE(str_key);
                                continue;
                        } else {
                                char *test;
@@ -1561,6 +1562,7 @@ phar_entry_info *phar_get_entry_info_dir(phar_archive_data *phar, char *path, in
                                        if (error) {
                                                spprintf(error, 4096, "phar internal error: mounted path \"%s\" could not be retrieved from manifest", str_key);
                                        }
+                                       PHAR_STR_FREE(str_key);
                                        return NULL;
                                }
 
@@ -1568,8 +1570,10 @@ phar_entry_info *phar_get_entry_info_dir(phar_archive_data *phar, char *path, in
                                        if (error) {
                                                spprintf(error, 4096, "phar internal error: mounted path \"%s\" is not properly initialized as a mounted path", str_key);
                                        }
+                                       PHAR_STR_FREE(str_key);
                                        return NULL;
                                }
+                               PHAR_STR_FREE(str_key);
 
                                test_len = spprintf(&test, MAXPATHLEN, "%s%s", entry->tmp, path + keylen);
 
@@ -1661,7 +1665,11 @@ static int phar_call_openssl_signverify(int is_sign, php_stream *fp, off_t end,
        Z_TYPE_P(zdata) = IS_STRING;
        Z_STRLEN_P(zdata) = end;
 
+#if PHP_MAJOR_VERSION > 5
+       if (end != (off_t) php_stream_copy_to_mem(fp, (void **) &(Z_STRVAL_P(zdata)), (size_t) end, 0)) {
+#else
        if (end != (off_t) php_stream_copy_to_mem(fp, &(Z_STRVAL_P(zdata)), (size_t) end, 0)) {
+#endif
                zval_dtor(zdata);
                zval_dtor(zsig);
                zval_dtor(zkey);
@@ -1804,7 +1812,11 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, php_uint32 sig_typ
                        pfp = php_stream_open_wrapper(pfile, "rb", 0, NULL);
                        efree(pfile);
 
+#if PHP_MAJOR_VERSION > 5
+                       if (!pfp || !(pubkey_len = php_stream_copy_to_mem(pfp, (void **) &pubkey, PHP_STREAM_COPY_ALL, 0)) || !pubkey) {
+#else
                        if (!pfp || !(pubkey_len = php_stream_copy_to_mem(pfp, &pubkey, PHP_STREAM_COPY_ALL, 0)) || !pubkey) {
+#endif
                                if (pfp) {
                                        php_stream_close(pfp);
                                }