diff --git a/controller/rest/bookmarkcontroller.php b/controller/rest/bookmarkcontroller.php index 53f90e0b..6875af64 100644 --- a/controller/rest/bookmarkcontroller.php +++ b/controller/rest/bookmarkcontroller.php @@ -96,7 +96,8 @@ class BookmarkController extends ApiController { } // Check if it is a valid URL (after adding http(s) prefix) - if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) { + $urlData = parse_url($url); + if ($urlData === false || !isset($urlData['scheme']) || !isset($urlData['host'])) { return new JSONResponse(array('status' => 'error'), Http::STATUS_BAD_REQUEST); } @@ -133,7 +134,8 @@ class BookmarkController extends ApiController { public function editBookmark($id = null, $url = "", $item = array(), $title = "", $is_public = false, $record_id = null, $description = "") { // Check if it is a valid URL - if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) { + $urlData = parse_url($url); + if ($urlData === false || !isset($urlData['scheme']) || !isset($urlData['host'])) { return new JSONResponse(array(), Http::STATUS_BAD_REQUEST); } @@ -190,7 +192,8 @@ class BookmarkController extends ApiController { public function clickBookmark($url = "") { // Check if it is a valid URL - if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) { + $urlData = parse_url($url); + if ($urlData === false || !isset($urlData['scheme']) || !isset($urlData['host'])) { return new JSONResponse(array(), Http::STATUS_BAD_REQUEST); } diff --git a/tests/lib_bookmark_test.php b/tests/lib_bookmark_test.php index be626234..0135b043 100644 --- a/tests/lib_bookmark_test.php +++ b/tests/lib_bookmark_test.php @@ -17,8 +17,10 @@ class Test_LibBookmarks_Bookmarks extends PHPUnit_Framework_TestCase { function testAddBookmark() { $this->cleanDB(); $this->assertCount(0, Bookmarks::findBookmarks($this->userid, $this->db, 0, 'id', array(), true, -1)); - Bookmarks::addBookmark($this->userid, $this->db, 'http://owncloud.org', 'Owncloud project', array('oc', 'cloud'), 'An Awesome project'); + Bookmarks::addBookmark($this->userid, $this->db, 'http://owncloud.org', 'owncloud project', array('oc', 'cloud'), 'An Awesome project'); $this->assertCount(1, Bookmarks::findBookmarks($this->userid, $this->db, 0, 'id', array(), true, -1)); + Bookmarks::addBookmark($this->userid, $this->db, 'http://de.wikipedia.org/Ü', 'Das Ü', array('encyclopedia', 'lang'), 'A terrific letter'); + $this->assertCount(2, Bookmarks::findBookmarks($this->userid, $this->db, 0, 'id', array(), true, -1)); } function testFindBookmarks() {