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 12 năm trước cách đây
mục cha
commit
ec052432c0
2 tập tin đã thay đổi với 18 bổ sung6 xóa
  1. 14 5
      app/models/Feed.php
  2. 4 1
      app/models/RSSConfiguration.php

+ 14 - 5
app/models/Feed.php

@@ -17,8 +17,12 @@ class Feed extends Model {
 	private $error = 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 () {
@@ -110,11 +114,16 @@ class Feed extends Model {
 		$this->id = $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;
 		}
 
-		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;
 		} else {
 			throw new BadUrlException ($value);
@@ -527,7 +536,7 @@ class HelperFeed {
 				$key = $dao['id'];
 			}
 
-			$list[$key] = new Feed ($dao['url']);
+			$list[$key] = new Feed ($dao['url'], false);
 			$list[$key]->_category ($dao['category']);
 			$list[$key]->_name ($dao['name']);
 			$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'];
 	}
 	public function _urlShaarli ($value) {
-		$this->url_shaarli = '';
 		if (filter_var ($value, FILTER_VALIDATE_URL)) {
 			$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) {