From: Greg Beaver Date: Wed, 22 Jul 2009 18:13:38 +0000 (+0000) Subject: fix php bug #49018 (phar tar stores long filenames with prefix/name reversed) X-Git-Tag: php-5.4.0alpha1~191^2~3020 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8c574a4bd0acda85a6c324ac0b420e068f0154dc;p=php fix php bug #49018 (phar tar stores long filenames with prefix/name reversed) --- diff --git a/ext/phar/tar.c b/ext/phar/tar.c index 1869e5c6ea..1cd0711cda 100644 --- a/ext/phar/tar.c +++ b/ext/phar/tar.c @@ -343,6 +343,9 @@ bail: } for (j = 0; j < 100; j++) { name[i+j] = hdr->name[j]; + if (name[i+j] == '\0') { + break; + } } entry.filename_len = i+j; @@ -644,8 +647,8 @@ static int phar_tar_writeheaders(void *pDest, void *argument TSRMLS_DC) /* {{{ * } return ZEND_HASH_APPLY_STOP; } - memcpy(header.prefix, entry->filename+100, entry->filename_len - 100); - memcpy(header.name, entry->filename, 100); + memcpy(header.prefix, entry->filename, entry->filename_len - 100); + memcpy(header.name, entry->filename + (entry->filename_len - 100), 100); } else { memcpy(header.name, entry->filename, entry->filename_len); } diff --git a/ext/phar/tests/tar/bignames.phpt b/ext/phar/tests/tar/bignames.phpt index 4b51e2a921..c6b6bccdb1 100644 --- a/ext/phar/tests/tar/bignames.phpt +++ b/ext/phar/tests/tar/bignames.phpt @@ -11,11 +11,11 @@ $fname2 = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.2.tar'; $pname = 'phar://' . $fname; $p1 = new PharData($fname); -$p1[str_repeat('a', 101)] = 'hi'; +$p1[str_repeat('a', 100) . 'b'] = 'hi'; $p1[str_repeat('a', 255)] = 'hi2'; copy($fname, $fname2); $p2 = new PharData($fname2); -echo $p2[str_repeat('a', 101)]->getContent() . "\n"; +echo $p2[str_repeat('a', 100) . 'b']->getContent() . "\n"; echo $p2[str_repeat('a', 255)]->getContent() . "\n"; try {