tweeper.php: fix a problem with https URLs ending up in the enclosure element
authorAntonio Ospite <ao2@ao2.it>
Mon, 23 May 2016 13:32:27 +0000 (15:32 +0200)
committerAntonio Ospite <ao2@ao2.it>
Mon, 23 May 2016 13:32:27 +0000 (15:32 +0200)
When the remote host forces every URLs to be redirected to https, the
info returned by Tweeper::getUrlInfo() would contain an https URL, which
will end up being used in the "url" attribute of the enclosure element,
and this is invalid according to the RSS specification.

So make sure that an http URL is actually used for the "url" attribute.

tweeper.php

index f7e0a88..94ea05f 100644 (file)
@@ -139,11 +139,7 @@ class Tweeper {
       "video/ogg",
     );
 
       "video/ogg",
     );
 
-    // The RSS specification says that the enclosure element URL must be http.
-    // See http://sourceforge.net/p/feedvalidator/bugs/72/
-    $http_url = preg_replace("/^https/", "http", $url);
-
-    $url_info = Tweeper::getUrlInfo($http_url);
+    $url_info = Tweeper::getUrlInfo($url);
 
     $supported = in_array($url_info['content_type'], $supported_content_types);
     if (!$supported) {
 
     $supported = in_array($url_info['content_type'], $supported_content_types);
     if (!$supported) {
@@ -151,9 +147,13 @@ class Tweeper {
       return '';
     }
 
       return '';
     }
 
+    // The RSS specification says that the enclosure element URL must be http.
+    // See http://sourceforge.net/p/feedvalidator/bugs/72/
+    $http_url = preg_replace("/^https/", "http", $url_info['url']);
+
     $dom = new DOMDocument();
     $enc = $dom->createElement('enclosure');
     $dom = new DOMDocument();
     $enc = $dom->createElement('enclosure');
-    $enc->setAttribute('url', $url_info['url']);
+    $enc->setAttribute('url', $http_url);
     $enc->setAttribute('length', $url_info['download_content_length']);
     $enc->setAttribute('type', $url_info['content_type']);
 
     $enc->setAttribute('length', $url_info['download_content_length']);
     $enc->setAttribute('type', $url_info['content_type']);