summaryrefslogtreecommitdiff
path: root/_test/tests/inc/tar.test.php
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2013-10-28 20:22:05 +0100
committerAndreas Gohr <andi@splitbrain.org>2013-10-28 20:22:05 +0100
commit23a363f01514464eb2238ac09ec7723d03d57ecb (patch)
tree42c7dcff8c5b0e506a25d08ee5583ed2a24e8602 /_test/tests/inc/tar.test.php
parent25e48e54df60b3df6efa365daceb3a8966c8f427 (diff)
parent75cf672f10a71f7dee6d50eb70b742689838bc36 (diff)
downloadrpg-23a363f01514464eb2238ac09ec7723d03d57ecb.tar.gz
rpg-23a363f01514464eb2238ac09ec7723d03d57ecb.tar.bz2
Merge branch 'master' into stable
* master: (413 commits) release preparation fixed strict violation in ACL plugin Fix issues from teams:i18n:translation-check in localizations ensure locale is set back to the original value skip FS#2867 test if \s doesn't match \xA0 after attempting to change the locale unittests for auth_loadACL translation update allow charset for SSO to be configured FS#2148 Mailer: avoid overlong headers in content ids FS#2868 translation update translation update replace \s, \S with [ \t], [^ \t] in regexs used with acls translation update translation update translation update translation update Fix handling of the legacy subscription action name remove obsolete opera handling and session closing remove no longer used ajax.php fix proxy CONNECT where HTTP 1.1 answer is given ...
Diffstat (limited to '_test/tests/inc/tar.test.php')
-rw-r--r--_test/tests/inc/tar.test.php69
1 files changed, 63 insertions, 6 deletions
diff --git a/_test/tests/inc/tar.test.php b/_test/tests/inc/tar.test.php
index 90bc2e49e..417f1a853 100644
--- a/_test/tests/inc/tar.test.php
+++ b/_test/tests/inc/tar.test.php
@@ -11,7 +11,8 @@ class Tar_TestCase extends DokuWikiTest {
public function test_createdynamic() {
$tar = new Tar();
- $dir = dirname(__FILE__).'/tar';
+ $dir = dirname(__FILE__).'/tar';
+ $tdir = ltrim($dir,'/');
$tar->create();
$tar->AddFile("$dir/testdata1.txt");
@@ -24,11 +25,17 @@ class Tar_TestCase extends DokuWikiTest {
$this->assertTrue(strpos($data, 'testcontent2') !== false, 'Content in TAR');
$this->assertTrue(strpos($data, 'testcontent3') !== false, 'Content in TAR');
- $this->assertTrue(strpos($data, "$dir/testdata1.txt") !== false, 'Path in TAR');
+ // fullpath might be too long to be stored as full path FS#2802
+ $this->assertTrue(strpos($data, "$tdir") !== false, 'Path in TAR');
+ $this->assertTrue(strpos($data, "testdata1.txt") !== false, 'File in TAR');
+
$this->assertTrue(strpos($data, 'noway/testdata2.txt') !== false, 'Path in TAR');
$this->assertTrue(strpos($data, 'another/testdata3.txt') !== false, 'Path in TAR');
- $this->assertTrue(strpos($data, "$dir/foobar/testdata2.txt") === false, 'Path not in TAR');
+ // fullpath might be too long to be stored as full path FS#2802
+ $this->assertTrue(strpos($data, "$tdir/foobar") === false, 'Path not in TAR');
+ $this->assertTrue(strpos($data, "foobar.txt") === false, 'File not in TAR');
+
$this->assertTrue(strpos($data, "foobar") === false, 'Path not in TAR');
}
@@ -42,6 +49,7 @@ class Tar_TestCase extends DokuWikiTest {
$tar = new Tar();
$dir = dirname(__FILE__).'/tar';
+ $tdir = ltrim($dir,'/');
$tmp = tempnam(sys_get_temp_dir(), 'dwtartest');
$tar->create($tmp, Tar::COMPRESS_NONE);
@@ -50,6 +58,8 @@ class Tar_TestCase extends DokuWikiTest {
$tar->addData('another/testdata3.txt', 'testcontent3');
$tar->close();
+copy ($tmp, '/tmp/test.tar');
+
$this->assertTrue(filesize($tmp) > 30); //arbitrary non-zero number
$data = file_get_contents($tmp);
@@ -57,11 +67,17 @@ class Tar_TestCase extends DokuWikiTest {
$this->assertTrue(strpos($data, 'testcontent2') !== false, 'Content in TAR');
$this->assertTrue(strpos($data, 'testcontent3') !== false, 'Content in TAR');
- $this->assertTrue(strpos($data, "$dir/testdata1.txt") !== false, 'Path in TAR');
+ // fullpath might be too long to be stored as full path FS#2802
+ $this->assertTrue(strpos($data, "$tdir") !== false, "Path in TAR '$tdir'");
+ $this->assertTrue(strpos($data, "testdata1.txt") !== false, 'File in TAR');
+
$this->assertTrue(strpos($data, 'noway/testdata2.txt') !== false, 'Path in TAR');
$this->assertTrue(strpos($data, 'another/testdata3.txt') !== false, 'Path in TAR');
- $this->assertTrue(strpos($data, "$dir/foobar/testdata2.txt") === false, 'Path not in TAR');
+ // fullpath might be too long to be stored as full path FS#2802
+ $this->assertTrue(strpos($data, "$tdir/foobar") === false, 'Path not in TAR');
+ $this->assertTrue(strpos($data, "foobar.txt") === false, 'File not in TAR');
+
$this->assertTrue(strpos($data, "foobar") === false, 'Path not in TAR');
@unlink($tmp);
@@ -248,6 +264,28 @@ class Tar_TestCase extends DokuWikiTest {
}
}
+ // FS#1442
+ public function test_createlongfile() {
+ $tar = new Tar();
+ $tmp = tempnam(sys_get_temp_dir(), 'dwtartest');
+
+ $path = '0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.txt';
+
+ $tar->create($tmp, Tar::COMPRESS_NONE);
+ $tar->addData($path, 'testcontent1');
+ $tar->close();
+
+ $this->assertTrue(filesize($tmp) > 30); //arbitrary non-zero number
+ $data = file_get_contents($tmp);
+
+ // We should find the complete path and a longlink entry
+ $this->assertTrue(strpos($data, 'testcontent1') !== false, 'content in TAR');
+ $this->assertTrue(strpos($data, $path) !== false, 'path in TAR');
+ $this->assertTrue(strpos($data, '@LongLink') !== false, '@LongLink in TAR');
+
+ @unlink($tmp);
+ }
+
public function test_createlongpathustar() {
$tar = new Tar();
$tmp = tempnam(sys_get_temp_dir(), 'dwtartest');
@@ -360,4 +398,23 @@ class Tar_TestCase extends DokuWikiTest {
$this->assertEquals(512*4, strlen($file)); // 1 header block + data block + 2 footer blocks
}
-} \ No newline at end of file
+
+
+ public function test_cleanPath(){
+ $tar = new Tar();
+ $tests = array (
+ '/foo/bar' => 'foo/bar',
+ '/foo/bar/' => 'foo/bar',
+ 'foo//bar' => 'foo/bar',
+ 'foo/0/bar' => 'foo/0/bar',
+ 'foo/../bar' => 'bar',
+ 'foo/bang/bang/../../bar' => 'foo/bar',
+ 'foo/../../bar' => 'bar',
+ 'foo/.././../bar' => 'bar',
+ );
+
+ foreach($tests as $in => $out){
+ $this->assertEquals($out, $tar->cleanPath($in), "Input: $in");
+ }
+ }
+}