]> granicus.if.org Git - php/commitdiff
fix php bug #49018 (phar tar stores long filenames with prefix/name reversed)
authorGreg Beaver <cellog@php.net>
Wed, 22 Jul 2009 18:13:38 +0000 (18:13 +0000)
committerGreg Beaver <cellog@php.net>
Wed, 22 Jul 2009 18:13:38 +0000 (18:13 +0000)
ext/phar/tar.c
ext/phar/tests/tar/bignames.phpt

index 1869e5c6ea63eee758be59aa3787b92ba4698723..1cd0711cdad4d17de54f178e419c0ff186af1fed 100644 (file)
@@ -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);
        }
index 4b51e2a9214f1b3168f8f2c9ac538200783f732d..c6b6bccdb1c3d01d1d9f22cd518fb382f712da45 100644 (file)
@@ -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 {