summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Wallner <mike@php.net>2015-03-30 14:45:38 +0200
committerMichael Wallner <mike@php.net>2015-03-30 14:45:38 +0200
commite148fff61d6e0129fd39b43808322521034b4191 (patch)
treee1fbe4a39f68c6fa73da253251258133aa423859
parent74090539c154b39710bcba5dd3468fd75c9ee09c (diff)
parent64d9c98fa9be3a67f01df68102e94ca80fcc75c9 (diff)
downloadphp-git-e148fff61d6e0129fd39b43808322521034b4191.tar.gz
Merge branch 'PHP-5.6'
* PHP-5.6: BFN fix bug #67761
-rw-r--r--ext/phar/tar.c7
-rw-r--r--ext/phar/tests/tar/bug67761.phpt19
-rw-r--r--ext/phar/tests/tar/files/bug67761.tar/bug67761.pharbin0 -> 12256 bytes
3 files changed, 24 insertions, 2 deletions
diff --git a/ext/phar/tar.c b/ext/phar/tar.c
index 9c72b273e7..ac8a394cb3 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
new file mode 100644
index 0000000000..408eca1e35
--- /dev/null
+++ b/ext/phar/tests/tar/files/bug67761.tar/bug67761.phar
Binary files differ