diff options
-rw-r--r-- | ext/phar/dirstream.c | 14 | ||||
-rw-r--r-- | ext/phar/phar.c | 6 | ||||
-rwxr-xr-x | ext/phar/phar_internal.h | 3 | ||||
-rwxr-xr-x | ext/phar/phar_object.c | 6 | ||||
-rw-r--r-- | ext/phar/stream.c | 6 | ||||
-rw-r--r-- | ext/phar/tests/019bU.phpt | 2 | ||||
-rw-r--r-- | ext/phar/tests/bug46032.phpt | 4 | ||||
-rwxr-xr-x | ext/phar/tests/create_new_and_modify.phpt | 4 | ||||
-rw-r--r-- | ext/phar/tests/fopen_edgecases2.phpt | 7 | ||||
-rw-r--r-- | ext/phar/tests/front.phar.phpt | 2 | ||||
-rw-r--r-- | ext/phar/tests/ini_set.phpt | 15 | ||||
-rw-r--r-- | ext/phar/tests/ini_setU.phpt | 31 | ||||
-rw-r--r-- | ext/phar/tests/phar_buildfromdirectory2.phpt | 2 | ||||
-rw-r--r-- | ext/phar/tests/phar_buildfromiterator10.phpt | 71 | ||||
-rw-r--r-- | ext/phar/tests/phar_buildfromiterator10U.phpt | 101 | ||||
-rw-r--r-- | ext/phar/tests/phar_bz2.phpt | 5 | ||||
-rw-r--r-- | ext/phar/tests/phar_bz2U.phpt | 66 | ||||
-rw-r--r-- | ext/phar/util.c | 12 |
18 files changed, 101 insertions, 256 deletions
diff --git a/ext/phar/dirstream.c b/ext/phar/dirstream.c index f466b4a13f..c1758d4205 100644 --- a/ext/phar/dirstream.c +++ b/ext/phar/dirstream.c @@ -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); } } diff --git a/ext/phar/phar.c b/ext/phar/phar.c index ec441ee04a..877a6663c9 100644 --- a/ext/phar/phar.c +++ b/ext/phar/phar.c @@ -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); } } diff --git a/ext/phar/phar_internal.h b/ext/phar/phar_internal.h index 1259670690..7ebba2e513 100755 --- a/ext/phar/phar_internal.h +++ b/ext/phar/phar_internal.h @@ -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() diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index 2bc2f4394c..247e8e1ef8 100755 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -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); diff --git a/ext/phar/stream.c b/ext/phar/stream.c index bc38f5e75a..e8d80ce684 100644 --- a/ext/phar/stream.c +++ b/ext/phar/stream.c @@ -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); } } diff --git a/ext/phar/tests/019bU.phpt b/ext/phar/tests/019bU.phpt index c0864aa2ce..68e4ea3b2f 100644 --- a/ext/phar/tests/019bU.phpt +++ b/ext/phar/tests/019bU.phpt @@ -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; diff --git a/ext/phar/tests/bug46032.phpt b/ext/phar/tests/bug46032.phpt index 4ff1026b52..61ed608e3f 100644 --- a/ext/phar/tests/bug46032.phpt +++ b/ext/phar/tests/bug46032.phpt @@ -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: diff --git a/ext/phar/tests/create_new_and_modify.phpt b/ext/phar/tests/create_new_and_modify.phpt index 66587de023..c9b5d43d6d 100755 --- a/ext/phar/tests/create_new_and_modify.phpt +++ b/ext/phar/tests/create_new_and_modify.phpt @@ -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! diff --git a/ext/phar/tests/fopen_edgecases2.phpt b/ext/phar/tests/fopen_edgecases2.phpt index c606024ada..fb998e2bc1 100644 --- a/ext/phar/tests/fopen_edgecases2.phpt +++ b/ext/phar/tests/fopen_edgecases2.phpt @@ -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); diff --git a/ext/phar/tests/front.phar.phpt b/ext/phar/tests/front.phar.phpt index bab8ada0fd..ce961c200f 100644 --- a/ext/phar/tests/front.phar.phpt +++ b/ext/phar/tests/front.phar.phpt @@ -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> diff --git a/ext/phar/tests/ini_set.phpt b/ext/phar/tests/ini_set.phpt index 01dc995891..13ec88ab11 100644 --- a/ext/phar/tests/ini_set.phpt +++ b/ext/phar/tests/ini_set.phpt @@ -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 index 470040f7b8..0000000000 --- a/ext/phar/tests/ini_setU.phpt +++ /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" diff --git a/ext/phar/tests/phar_buildfromdirectory2.phpt b/ext/phar/tests/phar_buildfromdirectory2.phpt index 6c67f208af..3b9e420408 100644 --- a/ext/phar/tests/phar_buildfromdirectory2.phpt +++ b/ext/phar/tests/phar_buildfromdirectory2.phpt @@ -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=== diff --git a/ext/phar/tests/phar_buildfromiterator10.phpt b/ext/phar/tests/phar_buildfromiterator10.phpt index 4dc3af7cca..02c31e567f 100644 --- a/ext/phar/tests/phar_buildfromiterator10.phpt +++ b/ext/phar/tests/phar_buildfromiterator10.phpt @@ -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 index 74f41597a1..0000000000 --- a/ext/phar/tests/phar_buildfromiterator10U.phpt +++ /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=== diff --git a/ext/phar/tests/phar_bz2.phpt b/ext/phar/tests/phar_bz2.phpt index 6e05663d53..0e6e3ecb54 100644 --- a/ext/phar/tests/phar_bz2.phpt +++ b/ext/phar/tests/phar_bz2.phpt @@ -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 index 62f5c5812a..0000000000 --- a/ext/phar/tests/phar_bz2U.phpt +++ /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=== diff --git a/ext/phar/util.c b/ext/phar/util.c index 434a37e7f0..0aa2bd7bb9 100644 --- a/ext/phar/util.c +++ b/ext/phar/util.c @@ -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); } |