From 3f3994647b238f05233da5f22f75a88582562308 Mon Sep 17 00:00:00 2001 From: cash Date: Sat, 1 Oct 2011 21:51:53 -0400 Subject: Fixes #3686 added work around for PHP bug when validating URLs with dashes --- mod/bookmarks/actions/bookmarks/save.php | 19 ++++++++++++++++++- mod/bookmarks/languages/en.php | 3 ++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/mod/bookmarks/actions/bookmarks/save.php b/mod/bookmarks/actions/bookmarks/save.php index 19bb3c73a..f240c4b26 100644 --- a/mod/bookmarks/actions/bookmarks/save.php +++ b/mod/bookmarks/actions/bookmarks/save.php @@ -24,7 +24,24 @@ if ($address && !preg_match("#^((ht|f)tps?:)?//#i", $address)) { $address = "http://$address"; } -if (!$title || !$address || !filter_var($address, FILTER_VALIDATE_URL)) { +if (!$title || !$address) { + register_error(elgg_echo('bookmarks:save:failed')); + forward(REFERER); +} + +// see https://bugs.php.net/bug.php?id=51192 +$php_5_2_13_and_below = version_compare(PHP_VERSION, '5.2.14', '<'); +$php_5_3_0_to_5_3_2 = version_compare(PHP_VERSION, '5.3.0', '>=') && + version_compare(PHP_VERSION, '5.3.3', '<'); + +$validated = false; +if ($php_5_2_13_and_below || $php_5_3_0_to_5_3_2) { + $tmp_address = str_replace("-", "", $address); + $validated = filter_var($tmp_address, FILTER_VALIDATE_URL); +} else { + $validated = filter_var($address, FILTER_VALIDATE_URL); +} +if (!$validated) { register_error(elgg_echo('bookmarks:save:failed')); forward(REFERER); } diff --git a/mod/bookmarks/languages/en.php b/mod/bookmarks/languages/en.php index 1d32a0344..0478e292f 100644 --- a/mod/bookmarks/languages/en.php +++ b/mod/bookmarks/languages/en.php @@ -24,7 +24,7 @@ $english = array( 'bookmarks:with' => "Share with", 'bookmarks:new' => "A new bookmark", 'bookmarks:via' => "via bookmarks", - 'bookmarks:address' => "Address of the resource to bookmark", + 'bookmarks:address' => "Address of the bookmark", 'bookmarks:none' => 'No bookmarks', 'bookmarks:delete:confirm' => "Are you sure you want to delete this resource?", @@ -75,6 +75,7 @@ $english = array( */ 'bookmarks:save:failed' => "Your bookmark could not be saved. Make sure you've entered a title and address and then try again.", + 'bookmarks:save:invalid' => "The address of the bookmark is invalid and could nto be saved.", 'bookmarks:delete:failed' => "Your bookmark could not be deleted. Please try again.", ); -- cgit v1.2.3