From 1063008826ca00941c65ef7ea213dfae713db1bf Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Wed, 23 Jan 2013 12:50:17 -0800 Subject: [PATCH] [FileBackend] Fixed bug where "false" could be included in getDirectoryList(). Change-Id: Ib14192d4f5c5143b07af2191b62ea3919483445a --- includes/filebackend/SwiftFileBackend.php | 2 +- .../phpunit/includes/filebackend/FileBackendTest.php | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) 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() { -- 2.20.1