[horde] Pretty sure I found Bug in Trean (Bookmarks)
Andy Dorman
adorman at ironicdesign.com
Thu Oct 3 13:10:17 UTC 2013
We have a debian install with php 5.5.3 and we just updated to Horde
5.1.4, trean 1.0.3-2. I am mainly a perl programmer, but I can find my
way around php fairly well (though I spend a LOT of time at
php.net/manual/ )
While testing the new release we ran into the problem below when going
to bookmarks at /trean/
> Horde_Db_Exception Object
> (
> [details] =>
> [logged] => 1
> [_logLevel:protected] => 0
> [message:protected] => SQLSTATE[42703]: Undefined column: 7 ERROR: column "bookmark_" does not exist
> LINE 4: ORDER BY bookmark_ LIMIT 999
> ^
> [string:Exception:private] =>
> [code:protected] => 42703
> [file:protected] => /usr/share/php/Horde/Db/Adapter/Base.php
> [line:protected] => 555
> [trace:Exception:private] => Array
> (
> [0] => Array
> (
> [file] => /usr/share/php/Horde/Db/Adapter/Pdo/Base.php
> [line] => 83
> [function] => execute
> [class] => Horde_Db_Adapter_Base
> [type] => ->
> [args] => Array
> (
> [0] => SELECT bookmark_id, user_id, bookmark_url, bookmark_title, bookmark_description, bookmark_clicks, bookmark_http_status, favicon_url, bookmark_dt
> FROM trean_bookmarks
> WHERE user_id = ?
> ORDER BY bookmark_ LIMIT 999
> [1] => Array
> (
> [0] => 1
> )
>
> [2] =>
> )
>
> )
>
> [1] => Array
> (
> [file] => /usr/share/horde/trean/lib/Bookmarks.php
> [line] => 63
> [function] => selectAll
> [class] => Horde_Db_Adapter_Pdo_Base
> [type] => ->
> [args] => Array
> (
> [0] => SELECT bookmark_id, user_id, bookmark_url, bookmark_title, bookmark_description, bookmark_clicks, bookmark_http_status, favicon_url, bookmark_dt
> FROM trean_bookmarks
> WHERE user_id = ?
> ORDER BY bookmark_ LIMIT 999
> [1] => Array
> (
> [0] => 1
> )
>
> )
>
> )
>
> [2] => Array
> (
> [file] => /usr/share/horde/trean/lib/View/BookmarkList.php
> [line] => 148
> [function] => listBookmarks
> [class] => Trean_Bookmarks
> [type] => ->
> [args] => Array
> (
> [0] =>
> [1] =>
> [2] => 0
> [3] => 999
> )
>
> )
>
> [3] => Array
> (
> [file] => /usr/share/horde/trean/lib/View/BookmarkList.php
> [line] => 109
> [function] => _getBookmarks
> [class] => Trean_View_BookmarkList
> [type] => ->
> [args] => Array
> (
> )
>
> )
>
> [4] => Array
> (
> [file] => /usr/share/horde/trean/browse.php
> [line] => 17
> [function] => hasBookmarks
> [class] => Trean_View_BookmarkList
> [type] => ->
> [args] => Array
> (
> )
>
> )
>
> [5] => Array
> (
> [file] => /usr/share/horde/trean/index.php
> [line] => 11
> [args] => Array
> (
> [0] => /usr/share/horde/trean/browse.php
> )
>
> [function] => require
> )
>
> )
>
> [previous:Exception:private] => PDOException Object
> (
> [message:protected] => SQLSTATE[42703]: Undefined column: 7 ERROR: column "bookmark_" does not exist
> LINE 4: ORDER BY bookmark_ LIMIT 999
> ^
> [string:Exception:private] =>
> [code:protected] => 42703
> [file:protected] => /usr/share/php/Horde/Db/Adapter/Base.php
> [line:protected] => 551
> [trace:Exception:private] => Array
> (
> [0] => Array
> (
> [file] => /usr/share/php/Horde/Db/Adapter/Base.php
> [line] => 551
> [function] => query
> [class] => PDO
> [type] => ->
> [args] => Array
> (
> [0] => SELECT bookmark_id, user_id, bookmark_url, bookmark_title, bookmark_description, bookmark_clicks, bookmark_http_status, favicon_url, bookmark_dt
> FROM trean_bookmarks
> WHERE user_id = 1
> ORDER BY bookmark_ LIMIT 999
> )
>
> )
>
> [1] => Array
> (
> [file] => /usr/share/php/Horde/Db/Adapter/Pdo/Base.php
> [line] => 83
> [function] => execute
> [class] => Horde_Db_Adapter_Base
> [type] => ->
> [args] => Array
> (
> [0] => SELECT bookmark_id, user_id, bookmark_url, bookmark_title, bookmark_description, bookmark_clicks, bookmark_http_status, favicon_url, bookmark_dt
> FROM trean_bookmarks
> WHERE user_id = ?
> ORDER BY bookmark_ LIMIT 999
> [1] => Array
> (
> [0] => 1
> )
>
> [2] =>
> )
>
> )
>
> [2] => Array
> (
> [file] => /usr/share/horde/trean/lib/Bookmarks.php
> [line] => 63
> [function] => selectAll
> [class] => Horde_Db_Adapter_Pdo_Base
> [type] => ->
> [args] => Array
> (
> [0] => SELECT bookmark_id, user_id, bookmark_url, bookmark_title, bookmark_description, bookmark_clicks, bookmark_http_status, favicon_url, bookmark_dt
> FROM trean_bookmarks
> WHERE user_id = ?
> ORDER BY bookmark_ LIMIT 999
> [1] => Array
> (
> [0] => 1
> )
>
> )
>
> )
>
> [3] => Array
> (
> [file] => /usr/share/horde/trean/lib/View/BookmarkList.php
> [line] => 148
> [function] => listBookmarks
> [class] => Trean_Bookmarks
> [type] => ->
> [args] => Array
> (
> [0] =>
> [1] =>
> [2] => 0
> [3] => 999
> )
>
> )
>
> [4] => Array
> (
> [file] => /usr/share/horde/trean/lib/View/BookmarkList.php
> [line] => 109
> [function] => _getBookmarks
> [class] => Trean_View_BookmarkList
> [type] => ->
> [args] => Array
> (
> )
>
> )
>
> [5] => Array
> (
> [file] => /usr/share/horde/trean/browse.php
> [line] => 17
> [function] => hasBookmarks
> [class] => Trean_View_BookmarkList
> [type] => ->
> [args] => Array
> (
> )
>
> )
>
> [6] => Array
> (
> [file] => /usr/share/horde/trean/index.php
> [line] => 11
> [args] => Array
> (
> [0] => /usr/share/horde/trean/browse.php
> )
>
> [function] => require
> )
>
> )
>
> [previous:Exception:private] =>
> [errorInfo] => Array
> (
> [0] => 42703
> [1] => 7
> [2] => ERROR: column "bookmark_" does not exist
> LINE 4: ORDER BY bookmark_ LIMIT 999
> ^
> )
>
> )
>
> )
I looked at the problem code below and was very surprised that
apparently the default value for $sortby in the function call is not
being applied.
public function listBookmarks($sortby = 'title', $sortdir = 0,
$from = 0, $count = 0)
{
$values = array($this->_userId);
$sql = 'SELECT bookmark_id, user_id, bookmark_url,
bookmark_title, bookmark_description, bookmark_clicks,
bookmark_http_status, favicon_url, bookmark_dt
FROM trean_bookmarks
WHERE user_id = ?
ORDER BY bookmark_' . $sortby . ($sortdir ? ' DESC' : '');
So it appears that if you call listBookmarks with an null value for
sortby as shown in this Array, PHP considers that empty value to be
valid and tries to use it?
>> [args] => Array
>> (
>> [0] =>
>> [1] =>
>> [2] => 0
>> [3] => 999
>> )
Just to confirm my suspicions, I added the ugly "bandaid" below just
before the $sql assignment, and the problem went away.
if (strlen($sortby) < 3) $sortby = 'title';
However, I am sure the proper fix is to not pass a null value for
$sortby when calling listBookmarks.
I will file a bug report if someone can confirm this is not something
really dumb I have missed. I will also see if I can figure out a better
fix as well.
--
Andy Dorman
More information about the horde
mailing list