Browse Source

Contournement bug PHP 5.3.3-

Bug #51192  FILTER_VALIDATE_URL will invalidate a hostname that includes
'-'
https://bugs.php.net/bug.php?id=51192
Corrige https://github.com/marienfressinaud/FreshRSS/issues/221

Au passage, désactive la validation des URLS provenant de la base de
données et qui ont déjà été validées.
Alexandre Alapetite 13 năm trước cách đây
mục cha
commit
ec052432c0

+ 14 - 5
app/models/Feed.php

@@ -17,8 +17,12 @@ class Feed extends Model {
 	private $error = false;
 	private $error = false;
 	private $keep_history = false;
 	private $keep_history = false;
 
 
-	public function __construct ($url) {
-		$this->_url ($url);
+	public function __construct ($url, $validate=true) {
+		if ($validate) {
+			$this->_url ($url);
+		} else {
+			$this->url = $url;
+		}
 	}
 	}
 
 
 	public function id () {
 	public function id () {
@@ -110,11 +114,16 @@ class Feed extends Model {
 		$this->id = $value;
 		$this->id = $value;
 	}
 	}
 	public function _url ($value) {
 	public function _url ($value) {
-		if (!is_null ($value) && !preg_match ('#^https?://#', $value)) {
+		if (empty ($value)) {
+			throw new BadUrlException ($value);
+		}
+		if (!preg_match ('#^https?://#', $value)) {
 			$value = 'http://' . $value;
 			$value = 'http://' . $value;
 		}
 		}
 
 
-		if (!is_null ($value) && filter_var ($value, FILTER_VALIDATE_URL)) {
+		if (filter_var ($value, FILTER_VALIDATE_URL)) {
+			$this->url = $value;
+		} elseif (version_compare(PHP_VERSION, '5.3.3', '<') && (strpos($value, '-') > 0) && ($value === filter_var($value, FILTER_SANITIZE_URL))) {	//PHP bug #51192
 			$this->url = $value;
 			$this->url = $value;
 		} else {
 		} else {
 			throw new BadUrlException ($value);
 			throw new BadUrlException ($value);
@@ -527,7 +536,7 @@ class HelperFeed {
 				$key = $dao['id'];
 				$key = $dao['id'];
 			}
 			}
 
 
-			$list[$key] = new Feed ($dao['url']);
+			$list[$key] = new Feed ($dao['url'], false);
 			$list[$key]->_category ($dao['category']);
 			$list[$key]->_category ($dao['category']);
 			$list[$key]->_name ($dao['name']);
 			$list[$key]->_name ($dao['name']);
 			$list[$key]->_website ($dao['website']);
 			$list[$key]->_website ($dao['website']);

+ 4 - 1
app/models/RSSConfiguration.php

@@ -248,9 +248,12 @@ class RSSConfiguration extends Model {
 		$this->mark_when['scroll'] = $values['scroll'];
 		$this->mark_when['scroll'] = $values['scroll'];
 	}
 	}
 	public function _urlShaarli ($value) {
 	public function _urlShaarli ($value) {
-		$this->url_shaarli = '';
 		if (filter_var ($value, FILTER_VALIDATE_URL)) {
 		if (filter_var ($value, FILTER_VALIDATE_URL)) {
 			$this->url_shaarli = $value;
 			$this->url_shaarli = $value;
+		} elseif (version_compare(PHP_VERSION, '5.3.3', '<') && (strpos($value, '-') > 0) && ($value === filter_var($value, FILTER_SANITIZE_URL))) {	//PHP bug #51192
+			$this->url_shaarli = $value;
+		} else {
+			$this->url_shaarli = '';
 		}
 		}
 	}
 	}
 	public function _theme ($value) {
 	public function _theme ($value) {