summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/phar/dirstream.c14
-rw-r--r--ext/phar/phar.c6
-rwxr-xr-xext/phar/phar_internal.h3
-rwxr-xr-xext/phar/phar_object.c6
-rw-r--r--ext/phar/stream.c6
-rw-r--r--ext/phar/tests/019bU.phpt2
-rw-r--r--ext/phar/tests/bug46032.phpt4
-rwxr-xr-xext/phar/tests/create_new_and_modify.phpt4
-rw-r--r--ext/phar/tests/fopen_edgecases2.phpt7
-rw-r--r--ext/phar/tests/front.phar.phpt2
-rw-r--r--ext/phar/tests/ini_set.phpt15
-rw-r--r--ext/phar/tests/ini_setU.phpt31
-rw-r--r--ext/phar/tests/phar_buildfromdirectory2.phpt2
-rw-r--r--ext/phar/tests/phar_buildfromiterator10.phpt71
-rw-r--r--ext/phar/tests/phar_buildfromiterator10U.phpt101
-rw-r--r--ext/phar/tests/phar_bz2.phpt5
-rw-r--r--ext/phar/tests/phar_bz2U.phpt66
-rw-r--r--ext/phar/util.c12
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);
}