diff options
author | Michael Wallner <mike@php.net> | 2015-03-30 14:42:37 +0200 |
---|---|---|
committer | Michael Wallner <mike@php.net> | 2015-03-30 14:42:37 +0200 |
commit | 90a8b59e9c22b5ed75a08679da06e3737b9e547d (patch) | |
tree | b1c111de9bc5dcf08ffe8f2cdd70fc7ec660c419 | |
parent | 3a660bf3a5a73c10e05eccfcdf26d978f585f0af (diff) | |
parent | 8f7e378b9f2fb4f2bb5605d9440d7d34bee6978a (diff) | |
download | php-git-90a8b59e9c22b5ed75a08679da06e3737b9e547d.tar.gz |
Merge branch 'PHP-5.5' into PHP-5.6
* PHP-5.5:
fix bug #67761
-rw-r--r-- | ext/phar/tar.c | 7 | ||||
-rw-r--r-- | ext/phar/tests/tar/bug67761.phpt | 19 | ||||
-rw-r--r-- | ext/phar/tests/tar/files/bug67761.tar/bug67761.phar | bin | 0 -> 12256 bytes |
3 files changed, 24 insertions, 2 deletions
diff --git a/ext/phar/tar.c b/ext/phar/tar.c index 42b51686f0..58cd6e22fb 100644 --- a/ext/phar/tar.c +++ b/ext/phar/tar.c @@ -102,7 +102,7 @@ int phar_is_tar(char *buf, char *fname) /* {{{ */ tar_header *header = (tar_header *) buf; php_uint32 checksum = phar_tar_number(header->checksum, sizeof(header->checksum)); php_uint32 ret; - char save[sizeof(header->checksum)]; + char save[sizeof(header->checksum)], *bname; /* assume that the first filename in a tar won't begin with <?php */ if (!strncmp(buf, "<?php", sizeof("<?php")-1)) { @@ -113,7 +113,10 @@ int phar_is_tar(char *buf, char *fname) /* {{{ */ memset(header->checksum, ' ', sizeof(header->checksum)); ret = (checksum == phar_tar_checksum(buf, 512)); memcpy(header->checksum, save, sizeof(header->checksum)); - if (!ret && strstr(fname, ".tar")) { + if ((bname = strrchr(fname, PHP_DIR_SEPARATOR))) { + fname = bname; + } + if (!ret && (bname = strstr(fname, ".tar")) && (bname[4] == '\0' || bname[4] == '.')) { /* probably a corrupted tar - so we will pretend it is one */ return 1; } diff --git a/ext/phar/tests/tar/bug67761.phpt b/ext/phar/tests/tar/bug67761.phpt new file mode 100644 index 0000000000..860213d28e --- /dev/null +++ b/ext/phar/tests/tar/bug67761.phpt @@ -0,0 +1,19 @@ +--TEST-- +Bug #67761 (Phar::mapPhar fails for Phars inside a path containing ".tar") +--SKIPIF-- +<?php extension_loaded("phar") or die("SKIP need ext/phar suppport"); ?> +--FILE-- +<?php + +echo "Test\n"; + +include __DIR__."/files/bug67761.tar/bug67761.phar"; + +?> + +===DONE=== +--EXPECT-- +Test +#!/usr/bin/env php +Test +===DONE=== diff --git a/ext/phar/tests/tar/files/bug67761.tar/bug67761.phar b/ext/phar/tests/tar/files/bug67761.tar/bug67761.phar Binary files differnew file mode 100644 index 0000000000..408eca1e35 --- /dev/null +++ b/ext/phar/tests/tar/files/bug67761.tar/bug67761.phar |