From: Aaron Schulz Date: Wed, 23 Jan 2013 20:50:17 +0000 (-0800) Subject: [FileBackend] Fixed bug where "false" could be included in getDirectoryList(). X-Git-Tag: 1.31.0-rc.0~20941^2 X-Git-Url: http://git.cyclocoop.org/%24self?a=commitdiff_plain;h=1063008826ca00941c65ef7ea213dfae713db1bf;p=lhc%2Fweb%2Fwiklou.git [FileBackend] Fixed bug where "false" could be included in getDirectoryList(). Change-Id: Ib14192d4f5c5143b07af2191b62ea3919483445a --- diff --git a/includes/filebackend/SwiftFileBackend.php b/includes/filebackend/SwiftFileBackend.php index 02c0c9acb2..3c097a1f9b 100644 --- a/includes/filebackend/SwiftFileBackend.php +++ b/includes/filebackend/SwiftFileBackend.php @@ -988,7 +988,7 @@ class SwiftFileBackend extends FileBackendStore { $objects = $container->list_objects( $limit, $after, $prefix ); foreach ( $objects as $object ) { // files $objectDir = $this->getParentDir( $object ); // directory of object - if ( $objectDir !== false ) { // file has a parent dir + if ( $objectDir !== false && $objectDir !== $dir ) { // Swift stores paths in UTF-8, using binary sorting. // See function "create_container_table" in common/db.py. // If a directory is not "greater" than the last one, diff --git a/tests/phpunit/includes/filebackend/FileBackendTest.php b/tests/phpunit/includes/filebackend/FileBackendTest.php index 7beb4feeab..0cb810535c 100644 --- a/tests/phpunit/includes/filebackend/FileBackendTest.php +++ b/tests/phpunit/includes/filebackend/FileBackendTest.php @@ -1998,12 +1998,22 @@ class FileBackendTest extends MediaWikiTestCase { $this->assertEquals( $expected, $list, "Correct dir listing ($backendName)." ); + $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/e/subdir1" ) ); + $items = is_array( $iter ) ? $iter : iterator_to_array( $iter ); + $this->assertEquals( array(), $items, "Directory listing is empty." ); + foreach ( $files as $file ) { // clean up $this->backend->doOperation( array( 'op' => 'delete', 'src' => $file ) ); } $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/not/exists" ) ); - foreach ( $iter as $iter ) {} // no errors + foreach ( $iter as $file ) {} // no errors + $items = is_array( $iter ) ? $iter : iterator_to_array( $iter ); + $this->assertEquals( array(), $items, "Directory listing is empty." ); + + $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/e/not/exists" ) ); + $items = is_array( $iter ) ? $iter : iterator_to_array( $iter ); + $this->assertEquals( array(), $items, "Directory listing is empty." ); } public function testLockCalls() {