diff options
author | Andreas Gohr <andi@splitbrain.org> | 2015-03-18 20:27:10 +0100 |
---|---|---|
committer | Andreas Gohr <andi@splitbrain.org> | 2015-03-18 20:30:24 +0100 |
commit | d387bf5e958e9d25a7192d1f5e5280ac0eb82da7 (patch) | |
tree | 0d79305202777f3639bfe7c8b38c75619d251c32 /_test/tests/inc/io_readfile.test.php | |
parent | 2432ea9ee263bc34d0f985a5b75e792d24693186 (diff) | |
download | rpg-d387bf5e958e9d25a7192d1f5e5280ac0eb82da7.tar.gz rpg-d387bf5e958e9d25a7192d1f5e5280ac0eb82da7.tar.bz2 |
correct error checking for bz2 file reading
The code reading .bz2 compressed files did not correctly check for
possible read errors. In case of a corrupted file this could have led to
an infinite loop.
Thanks to Filippo Cavallarin from www.segment.technology for dicovering
this bug.
Diffstat (limited to '_test/tests/inc/io_readfile.test.php')
-rw-r--r-- | _test/tests/inc/io_readfile.test.php | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/_test/tests/inc/io_readfile.test.php b/_test/tests/inc/io_readfile.test.php new file mode 100644 index 000000000..e3e90cd8d --- /dev/null +++ b/_test/tests/inc/io_readfile.test.php @@ -0,0 +1,53 @@ +<?php + +class io_readfile_test extends DokuWikiTest { + + /* + * dependency for tests needing zlib extension to pass + */ + public function test_ext_zlib() { + if (!extension_loaded('zlib')) { + $this->markTestSkipped('skipping all zlib tests. Need zlib extension'); + } + } + + /* + * dependency for tests needing zlib extension to pass + */ + public function test_ext_bz2() { + if (!extension_loaded('bz2')) { + $this->markTestSkipped('skipping all bzip2 tests. Need bz2 extension'); + } + } + + function test_plain(){ + // since git converts line endings, we can't check in this test file but have to create it ourselves + $plain = TMP_DIR.'/test.txt'; + file_put_contents($plain, "The\015\012Test\015\012"); + + $this->assertEquals("The\012Test\012", io_readFile($plain)); + $this->assertEquals("The\015\012Test\015\012", io_readFile($plain, false)); + $this->assertEquals(false, io_readFile(__DIR__.'/io_readfile/nope.txt')); + } + + /** + * @depends test_ext_zlib + */ + function test_gzfiles(){ + $this->assertEquals("The\012Test\012", io_readFile(__DIR__.'/io_readfile/test.txt.gz')); + $this->assertEquals("The\015\012Test\015\012", io_readFile(__DIR__.'/io_readfile/test.txt.gz', false)); + $this->assertEquals(false, io_readFile(__DIR__.'/io_readfile/nope.txt.gz')); + $this->assertEquals(false, io_readFile(__DIR__.'/io_readfile/corrupt.txt.gz')); + } + + /** + * @depends test_ext_bz2 + */ + function test_bzfiles(){ + $this->assertEquals("The\012Test\012", io_readFile(__DIR__.'/io_readfile/test.txt.bz2')); + $this->assertEquals("The\015\012Test\015\012", io_readFile(__DIR__.'/io_readfile/test.txt.bz2', false)); + $this->assertEquals(false, io_readFile(__DIR__.'/io_readfile/nope.txt.bz2')); + $this->assertEquals(false, io_readFile(__DIR__.'/io_readfile/corrupt.txt.bz2')); + } + +}
\ No newline at end of file |