From 8c574a4bd0acda85a6c324ac0b420e068f0154dc Mon Sep 17 00:00:00 2001 From: Greg Beaver Date: Wed, 22 Jul 2009 18:13:38 +0000 Subject: [PATCH] fix php bug #49018 (phar tar stores long filenames with prefix/name reversed) --- ext/phar/tar.c | 7 +++++-- ext/phar/tests/tar/bignames.phpt | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) 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 { -- 2.50.1