From: Aaron Schulz Date: Thu, 26 Jul 2018 17:42:34 +0000 (-0700) Subject: Disallow empty paths in LockManager X-Git-Tag: 1.34.0-rc.0~4641^2 X-Git-Url: http://git.cyclocoop.org/%24image?a=commitdiff_plain;h=ea10f22dff35637957b2a16718ce958c6f6b620c;p=lhc%2Fweb%2Fwiklou.git Disallow empty paths in LockManager Fix broken FileBackend test that had paths normalizing to null. Change-Id: I8a7e88ae44118cc9578e1b306a5a008ccefc23af --- diff --git a/includes/libs/lockmanager/LockManager.php b/includes/libs/lockmanager/LockManager.php index e310768f03..d152c65ec0 100644 --- a/includes/libs/lockmanager/LockManager.php +++ b/includes/libs/lockmanager/LockManager.php @@ -201,6 +201,11 @@ abstract class LockManager { final protected function normalizePathsByType( array $pathsByType ) { $res = []; foreach ( $pathsByType as $type => $paths ) { + foreach ( $paths as $path ) { + if ( (string)$path === '' ) { + throw new InvalidArgumentException( __METHOD__ . ": got empty path." ); + } + } $res[$this->lockTypeMap[$type]] = array_unique( $paths ); } diff --git a/tests/phpunit/includes/filebackend/FileBackendTest.php b/tests/phpunit/includes/filebackend/FileBackendTest.php index 2cd4ba6d4d..f570f55329 100644 --- a/tests/phpunit/includes/filebackend/FileBackendTest.php +++ b/tests/phpunit/includes/filebackend/FileBackendTest.php @@ -2333,28 +2333,29 @@ class FileBackendTest extends MediaWikiTestCase { private function doTestLockCalls() { $backendName = $this->backendClass(); + $base = $this->backend->getContainerStoragePath( 'test' ); $paths = [ - "test1.txt", - "test2.txt", - "test3.txt", - "subdir1", - "subdir1", // duplicate - "subdir1/test1.txt", - "subdir1/test2.txt", - "subdir2", - "subdir2", // duplicate - "subdir2/test3.txt", - "subdir2/test4.txt", - "subdir2/subdir", - "subdir2/subdir/test1.txt", - "subdir2/subdir/test2.txt", - "subdir2/subdir/test3.txt", - "subdir2/subdir/test4.txt", - "subdir2/subdir/test5.txt", - "subdir2/subdir/sub", - "subdir2/subdir/sub/test0.txt", - "subdir2/subdir/sub/120-px-file.txt", + "$base/test1.txt", + "$base/test2.txt", + "$base/test3.txt", + "$base/subdir1", + "$base/subdir1", // duplicate + "$base/subdir1/test1.txt", + "$base/subdir1/test2.txt", + "$base/subdir2", + "$base/subdir2", // duplicate + "$base/subdir2/test3.txt", + "$base/subdir2/test4.txt", + "$base/subdir2/subdir", + "$base/subdir2/subdir/test1.txt", + "$base/subdir2/subdir/test2.txt", + "$base/subdir2/subdir/test3.txt", + "$base/subdir2/subdir/test4.txt", + "$base/subdir2/subdir/test5.txt", + "$base/subdir2/subdir/sub", + "$base/subdir2/subdir/sub/test0.txt", + "$base/subdir2/subdir/sub/120-px-file.txt", ]; for ( $i = 0; $i < 25; $i++ ) {