summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/phar/tests/tar/files/biglink.tarbin0 -> 10240 bytes
-rw-r--r--ext/phar/tests/tar/links3.phpt19
-rw-r--r--ext/phar/util.c2
3 files changed, 20 insertions, 1 deletions
diff --git a/ext/phar/tests/tar/files/biglink.tar b/ext/phar/tests/tar/files/biglink.tar
new file mode 100644
index 0000000000..43bbf58423
--- /dev/null
+++ b/ext/phar/tests/tar/files/biglink.tar
Binary files differ
diff --git a/ext/phar/tests/tar/links3.phpt b/ext/phar/tests/tar/links3.phpt
new file mode 100644
index 0000000000..2241081660
--- /dev/null
+++ b/ext/phar/tests/tar/links3.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Phar: tar with link to absolute path
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--FILE--
+<?php
+try {
+ $p = new PharData(dirname(__FILE__) . '/files/biglink.tar');
+} catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+}
+echo $p['file.txt']->getContent();
+echo $p['my/file']->getContent();
+?>
+===DONE===
+--EXPECT--
+my file
+my file
+===DONE===
diff --git a/ext/phar/util.c b/ext/phar/util.c
index ddd51eb6fe..09258b1f96 100644
--- a/ext/phar/util.c
+++ b/ext/phar/util.c
@@ -33,7 +33,7 @@ static char *phar_get_link_location(phar_entry_info *entry TSRMLS_DC)
return NULL;
}
if (entry->link[0] == '/') {
- return entry->link;
+ return estrdup(entry->link + 1);
}
tmp = estrndup(entry->filename, entry->filename_len);
p = strrchr(tmp, '/');