]> granicus.if.org Git - php/commitdiff
add test for huge filenames, fix huge filename reading
authorGreg Beaver <cellog@php.net>
Mon, 21 Apr 2008 06:33:49 +0000 (06:33 +0000)
committerGreg Beaver <cellog@php.net>
Mon, 21 Apr 2008 06:33:49 +0000 (06:33 +0000)
ext/phar/tar.c
ext/phar/tests/tar/bignames.phpt [new file with mode: 0644]

index b4cb09d05cc91075d27a8e92357b317371523692..89207f23578123e033cae2b1df741b532c349670 100644 (file)
@@ -209,7 +209,7 @@ int phar_open_tarfile(php_stream* fp, char *fname, int fname_len, char *alias, i
 
                        strcpy(name, hdr->prefix);
                        strcat(name, hdr->name);
-                       entry.filename_len = strlen(name);
+                       entry.filename_len = strlen(hdr->prefix) + 100;
                        if (name[entry.filename_len - 1] == '/') {
                                /* some tar programs store directories with trailing slash */
                                entry.filename_len--;
diff --git a/ext/phar/tests/tar/bignames.phpt b/ext/phar/tests/tar/bignames.phpt
new file mode 100644 (file)
index 0000000..19d5f63
--- /dev/null
@@ -0,0 +1,35 @@
+--TEST--
+Phar: tar with huge filenames
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--FILE--
+<?php
+$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.tar';
+$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', 255)] = 'hi2';
+copy($fname, $fname2);
+$p2 = new PharData($fname2);
+echo $p2[str_repeat('a', 101)]->getContent() . "\n";
+echo $p2[str_repeat('a', 255)]->getContent() . "\n";
+
+try {
+       $p2[str_repeat('a', 400)] = 'yuck';
+} catch (Exception $e) {
+       echo $e->getMessage() . "\n";
+}
+?>
+===DONE===
+--CLEAN--
+<?php
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.tar');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.2.tar');
+?>
+--EXPECTF--
+hi
+hi2
+tar-based phar "%sbignames.2.tar" cannot be created, filename "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" is too long for tar file format
+===DONE===