From 6b0c91e868612c64d45c7d383ba47cc6c34ac10b Mon Sep 17 00:00:00 2001 From: Greg Beaver Date: Wed, 11 Nov 2009 21:02:59 +0000 Subject: [PATCH] fix PHP Bug #49910: no support for ././@LongLink for long filenames in phar tar support --- ext/phar/php_phar.h | 2 +- ext/phar/tar.c | 51 +++++++++++++++++- ext/phar/tests/tar/bug49910.phpt | 49 +++++++++++++++++ .../tar/files/Structures_Graph-1.0.3.tgz | Bin 0 -> 30191 bytes 4 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 ext/phar/tests/tar/bug49910.phpt create mode 100644 ext/phar/tests/tar/files/Structures_Graph-1.0.3.tgz diff --git a/ext/phar/php_phar.h b/ext/phar/php_phar.h index c8535fb7f4..e765ad4c5c 100644 --- a/ext/phar/php_phar.h +++ b/ext/phar/php_phar.h @@ -22,7 +22,7 @@ #ifndef PHP_PHAR_H #define PHP_PHAR_H -#define PHP_PHAR_VERSION "2.0.0" +#define PHP_PHAR_VERSION "2.0.1" #include "ext/standard/basic_functions.h" extern zend_module_entry phar_module_entry; diff --git a/ext/phar/tar.c b/ext/phar/tar.c index 383356fb93..53255b1d2d 100644 --- a/ext/phar/tar.c +++ b/ext/phar/tar.c @@ -200,6 +200,7 @@ int phar_parse_tarfile(php_stream* fp, char *fname, int fname_len, char *alias, tar_header *hdr; php_uint32 sum1, sum2, size, old; phar_archive_data *myphar, **actual; + int last_was_longlink = 0; if (error) { *error = NULL; @@ -332,7 +333,52 @@ bail: goto bail; } - if (!old && hdr->prefix[0] != 0) { + if (!last_was_longlink && hdr->typeflag == 'L') { + last_was_longlink = 1; + /* support the ././@LongLink system for storing long filenames */ + entry.filename_len = entry.uncompressed_filesize; + entry.filename = pemalloc(entry.filename_len+1, myphar->is_persistent); + + read = php_stream_read(fp, entry.filename, entry.filename_len); + if (read != entry.filename_len) { + efree(entry.filename); + if (error) { + spprintf(error, 4096, "phar error: \"%s\" is a corrupted tar file (truncated)", fname); + } + php_stream_close(fp); + phar_destroy_phar_data(myphar TSRMLS_CC); + return FAILURE; + } + entry.filename[entry.filename_len] = '\0'; + + /* skip blank stuff */ + size = ((size+511)&~511) - size; + + /* this is not good enough - seek succeeds even on truncated tars */ + php_stream_seek(fp, size, SEEK_CUR); + if ((uint)php_stream_tell(fp) > totalsize) { + efree(entry.filename); + if (error) { + spprintf(error, 4096, "phar error: \"%s\" is a corrupted tar file (truncated)", fname); + } + php_stream_close(fp); + phar_destroy_phar_data(myphar TSRMLS_CC); + return FAILURE; + } + + read = php_stream_read(fp, buf, sizeof(buf)); + + if (read != sizeof(buf)) { + efree(entry.filename); + if (error) { + spprintf(error, 4096, "phar error: \"%s\" is a corrupted tar file (truncated)", fname); + } + php_stream_close(fp); + phar_destroy_phar_data(myphar TSRMLS_CC); + return FAILURE; + } + continue; + } else if (!last_was_longlink && !old && hdr->prefix[0] != 0) { char name[256]; int i, j; @@ -357,7 +403,7 @@ bail: entry.filename_len--; } entry.filename = pestrndup(name, entry.filename_len, myphar->is_persistent); - } else { + } else if (!last_was_longlink) { int i; /* calculate strlen, which can be no longer than 100 */ @@ -375,6 +421,7 @@ bail: entry.filename_len--; } } + last_was_longlink = 0; phar_add_virtual_dirs(myphar, entry.filename, entry.filename_len TSRMLS_CC); diff --git a/ext/phar/tests/tar/bug49910.phpt b/ext/phar/tests/tar/bug49910.phpt new file mode 100644 index 0000000000..c799d52eeb --- /dev/null +++ b/ext/phar/tests/tar/bug49910.phpt @@ -0,0 +1,49 @@ +--TEST-- +Bug #49910: no support for ././@LongLink for long filenames in phar tar support +--SKIPIF-- + +--FILE-- +getPathName()); +} +print_r($files); +?> +===DONE=== +--EXPECT-- +Array +( + [0] => phar://*/Structures_Graph-1.0.3/LICENSE + [1] => phar://*/Structures_Graph-1.0.3/Structures/Graph/Manipulator/AcyclicTest.php + [2] => phar://*/Structures_Graph-1.0.3/Structures/Graph/Manipulator/TopologicalSorter.php + [3] => phar://*/Structures_Graph-1.0.3/Structures/Graph/Node.php + [4] => phar://*/Structures_Graph-1.0.3/Structures/Graph.php + [5] => phar://*/Structures_Graph-1.0.3/docs/generate.sh + [6] => phar://*/Structures_Graph-1.0.3/docs/html/Structures_Graph/Structures_Graph.html + [7] => phar://*/Structures_Graph-1.0.3/docs/html/Structures_Graph/Structures_Graph_Manipulator_AcyclicTest.html + [8] => phar://*/Structures_Graph-1.0.3/docs/html/Structures_Graph/Structures_Graph_Manipulator_TopologicalSorter.html + [9] => phar://*/Structures_Graph-1.0.3/docs/html/Structures_Graph/Structures_Graph_Node.html + [10] => phar://*/Structures_Graph-1.0.3/docs/html/Structures_Graph/_Structures_Graph_Manipulator_AcyclicTest_php.html + [11] => phar://*/Structures_Graph-1.0.3/docs/html/Structures_Graph/_Structures_Graph_Manipulator_TopologicalSorter_php.html + [12] => phar://*/Structures_Graph-1.0.3/docs/html/Structures_Graph/_Structures_Graph_Node_php.html + [13] => phar://*/Structures_Graph-1.0.3/docs/html/Structures_Graph/_Structures_Graph_php.html + [14] => phar://*/Structures_Graph-1.0.3/docs/html/Structures_Graph/tutorial_Structures_Graph.pkg.html + [15] => phar://*/Structures_Graph-1.0.3/docs/html/classtrees_Structures_Graph.html + [16] => phar://*/Structures_Graph-1.0.3/docs/html/elementindex.html + [17] => phar://*/Structures_Graph-1.0.3/docs/html/elementindex_Structures_Graph.html + [18] => phar://*/Structures_Graph-1.0.3/docs/html/errors.html + [19] => phar://*/Structures_Graph-1.0.3/docs/html/index.html + [20] => phar://*/Structures_Graph-1.0.3/docs/html/li_Structures_Graph.html + [21] => phar://*/Structures_Graph-1.0.3/docs/html/media/banner.css + [22] => phar://*/Structures_Graph-1.0.3/docs/html/media/stylesheet.css + [23] => phar://*/Structures_Graph-1.0.3/docs/html/packages.html + [24] => phar://*/Structures_Graph-1.0.3/docs/html/todolist.html + [25] => phar://*/Structures_Graph-1.0.3/docs/tutorials/Structures_Graph/Structures_Graph.pkg + [26] => phar://*/Structures_Graph-1.0.3/tests/AllTests.php + [27] => phar://*/Structures_Graph-1.0.3/tests/testCase/BasicGraph.php + [28] => phar://*/package.xml +) +===DONE=== \ No newline at end of file diff --git a/ext/phar/tests/tar/files/Structures_Graph-1.0.3.tgz b/ext/phar/tests/tar/files/Structures_Graph-1.0.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..fa14f0c6a325ac21b6cc6319af881731ee90b5f1 GIT binary patch literal 30191 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