From cc9d6db93df3f1779861b57619f761154089975f Mon Sep 17 00:00:00 2001 From: Jan Schneider Date: Fri, 13 Jan 2017 18:27:07 +0100 Subject: [PATCH] [jan] Fix retrieving files from root folder with SQL backends (Bug #14545). --- framework/Vfs/lib/Horde/Vfs/Sql.php | 13 +++++++++---- framework/Vfs/package.xml | 4 ++-- framework/Vfs/test/Horde/Vfs/FileTest.php | 5 +++++ framework/Vfs/test/Horde/Vfs/FtpTest.php | 5 +++++ framework/Vfs/test/Horde/Vfs/MongoTest.php | 5 +++++ framework/Vfs/test/Horde/Vfs/SmbTest.php | 5 +++++ framework/Vfs/test/Horde/Vfs/Sql/Base.php | 5 +++++ framework/Vfs/test/Horde/Vfs/SqlFile/Base.php | 5 +++++ framework/Vfs/test/Horde/Vfs/Ssh2Test.php | 5 +++++ framework/Vfs/test/Horde/Vfs/TestBase.php | 8 ++++++++ 10 files changed, 54 insertions(+), 6 deletions(-) diff --git a/framework/Vfs/lib/Horde/Vfs/Sql.php b/framework/Vfs/lib/Horde/Vfs/Sql.php index afdbedb72e3..4fa03ad9327 100644 --- a/framework/Vfs/lib/Horde/Vfs/Sql.php +++ b/framework/Vfs/lib/Horde/Vfs/Sql.php @@ -692,18 +692,23 @@ protected function _readBlob($table, $field, $criteria) } $where = ''; + $values = array(); foreach ($criteria as $key => $value) { if (!empty($where)) { $where .= ' AND '; } - $where .= $key . ' = ' . $this->_db->quote($value); + list($op, $val) = $this->_nullString($value); + $where .= $key . ' ' . $op; + $values = array_merge($values, $val); } - $sql = sprintf('SELECT %s FROM %s WHERE %s', - $field, $table, $where); + $sql = sprintf( + 'SELECT %s FROM %s WHERE %s', + $field, $table, $where + ); try { - $result = $this->_db->selectValue($sql); + $result = $this->_db->selectValue($sql, $values); $columns = $this->_db->columns($table); } catch (Horde_Db_Exception $e) { throw new Horde_Vfs_Exception($e); diff --git a/framework/Vfs/package.xml b/framework/Vfs/package.xml index 59708621086..7ed0cfbc315 100644 --- a/framework/Vfs/package.xml +++ b/framework/Vfs/package.xml @@ -38,7 +38,7 @@ Reading, writing and listing of files are all supported. LGPL-2.1 -* +* [jan] Fix retrieving files from root folder with SQL backends (Bug #14545). @@ -1309,7 +1309,7 @@ Added a class for providing garbage collection; removed all Horde dependancies. 2016-12-03 LGPL-2.1 -* +* [jan] Fix retrieving files from root folder with SQL backends (Bug #14545). diff --git a/framework/Vfs/test/Horde/Vfs/FileTest.php b/framework/Vfs/test/Horde/Vfs/FileTest.php index 9b3695e9e17..733ca4193e1 100644 --- a/framework/Vfs/test/Horde/Vfs/FileTest.php +++ b/framework/Vfs/test/Horde/Vfs/FileTest.php @@ -189,6 +189,11 @@ public function testChmod() $this->_chmod(); } + public function testNullRoot() + { + $this->_nullRoot(); + } + public function testDeleteUnusalFileNames() { $file = '高&执&行&力&的&打&造.txt'; diff --git a/framework/Vfs/test/Horde/Vfs/FtpTest.php b/framework/Vfs/test/Horde/Vfs/FtpTest.php index cb09f948f18..1053342c62b 100644 --- a/framework/Vfs/test/Horde/Vfs/FtpTest.php +++ b/framework/Vfs/test/Horde/Vfs/FtpTest.php @@ -165,6 +165,11 @@ public function testChmod() $this->_chmod(); } + public function testNullRoot() + { + $this->_nullRoot(); + } + public static function setUpBeforeClass() { if (!extension_loaded('ftp')) { diff --git a/framework/Vfs/test/Horde/Vfs/MongoTest.php b/framework/Vfs/test/Horde/Vfs/MongoTest.php index 43ddd6d867a..a893431a529 100644 --- a/framework/Vfs/test/Horde/Vfs/MongoTest.php +++ b/framework/Vfs/test/Horde/Vfs/MongoTest.php @@ -181,6 +181,11 @@ public function testListFolder() $this->_listFolder(); } + public function testNullRoot() + { + $this->_nullRoot(); + } + public static function setUpBeforeClass() { if (($config = self::getConfig('VFS_MONGO_TEST_CONFIG', __DIR__)) && diff --git a/framework/Vfs/test/Horde/Vfs/SmbTest.php b/framework/Vfs/test/Horde/Vfs/SmbTest.php index 89cc5865e32..374da699b38 100644 --- a/framework/Vfs/test/Horde/Vfs/SmbTest.php +++ b/framework/Vfs/test/Horde/Vfs/SmbTest.php @@ -202,6 +202,11 @@ public function testListFolder() $this->_listFolder(); } + public function testNullRoot() + { + $this->_nullRoot(); + } + public function testHostspecWithPath() { self::$vfs->createFolder('', 'hostspectest'); diff --git a/framework/Vfs/test/Horde/Vfs/Sql/Base.php b/framework/Vfs/test/Horde/Vfs/Sql/Base.php index 5cf69a1855e..70047031fbd 100644 --- a/framework/Vfs/test/Horde/Vfs/Sql/Base.php +++ b/framework/Vfs/test/Horde/Vfs/Sql/Base.php @@ -159,6 +159,11 @@ public function testListFolder() $this->_listFolder(); } + public function testNullRoot() + { + $this->_nullRoot(); + } + public static function setUpBeforeClass() { $logger = new Horde_Log_Logger(new Horde_Log_Handler_Cli()); diff --git a/framework/Vfs/test/Horde/Vfs/SqlFile/Base.php b/framework/Vfs/test/Horde/Vfs/SqlFile/Base.php index 23231b67075..5bd1092a505 100644 --- a/framework/Vfs/test/Horde/Vfs/SqlFile/Base.php +++ b/framework/Vfs/test/Horde/Vfs/SqlFile/Base.php @@ -159,6 +159,11 @@ public function testListFolder() $this->_listFolder(); } + public function testNullRoot() + { + $this->_nullRoot(); + } + public static function setUpBeforeClass() { // The SqlFile VFS driver needs to be refactored to a real composite diff --git a/framework/Vfs/test/Horde/Vfs/Ssh2Test.php b/framework/Vfs/test/Horde/Vfs/Ssh2Test.php index b2f6b34a73e..eb2b3e8389f 100644 --- a/framework/Vfs/test/Horde/Vfs/Ssh2Test.php +++ b/framework/Vfs/test/Horde/Vfs/Ssh2Test.php @@ -165,6 +165,11 @@ public function testChmod() $this->_chmod(); } + public function testNullRoot() + { + $this->_nullRoot(); + } + public static function setUpBeforeClass() { if (!extension_loaded('ssh2')) { diff --git a/framework/Vfs/test/Horde/Vfs/TestBase.php b/framework/Vfs/test/Horde/Vfs/TestBase.php index 8962b146470..f1f6c096933 100644 --- a/framework/Vfs/test/Horde/Vfs/TestBase.php +++ b/framework/Vfs/test/Horde/Vfs/TestBase.php @@ -29,6 +29,7 @@ protected function _listEmpty() { $this->assertEquals(array(), self::$vfs->listFolder('')); $this->assertEquals(array(), self::$vfs->listFolder('/')); + $this->assertEquals(array(), self::$vfs->listFolder(null)); } /** @@ -419,6 +420,13 @@ protected function _chmod() $this->assertEquals('-rw-r-----', $folder['chmod']['perms']); } + protected function _nullRoot() + { + self::$vfs->writeData(null, 'nulltest', 'abc'); + $this->assertEquals('abc', self::$vfs->read(null, 'nulltest')); + $this->assertEquals('abc', self::$vfs->read('', 'nulltest')); + } + protected function _sort($folders) { ksort($folders);