- fixed bug #5985: PHP warning in t3lib_div::getUrl when safe_mode or open_basedir...
authorMartin Kutschker <martin.t.kutschker@blackbox.net>
Sun, 9 Dec 2007 20:42:57 +0000 (20:42 +0000)
committerMartin Kutschker <martin.t.kutschker@blackbox.net>
Sun, 9 Dec 2007 20:42:57 +0000 (20:42 +0000)
- option  ignores option
- option  doesn't work with https
- t3lib_div::getUrl: option  has a wrong default port for https

git-svn-id: https://svn.typo3.org/TYPO3v4/Core/branches/TYPO3_4-1@2808 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
t3lib/class.t3lib_div.php

index 6092402..e6ff8ca 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,14 +1,22 @@
+
+2007-10-09  Martin Kutschker  <martin.t.kutschker@blackbox.net>
+
+       * Fixed bug #5985: PHP warning in t3lib_div::getUrl when safe_mode or open_basedir is set
+       * Fixed bug in t3lib_div::getUrl: option $includeHeaders ignores option $requestHeaders
+       * Fixed bug in t3lib_div::getUrl: option $inludeHeaders doesn't work with https
+       * Fixed bug in t3lib_div::getUrl: option $inludeHeaders has a wrong default port for https
+
 2007-12-09  Oliver Hader  <oh@inpublica.de>
 
        * Fixed bug #5994: IRRE - RTEhtmlarea is not show in child records if parent has no RTE
 
-2007-12-07     Dmitry Dulepov  <dmitry@typo3.org>
+2007-12-07  Dmitry Dulepov     <dmitry@typo3.org>
 
        * Fixed bug #6903: Translated language files are not loaded
 
 2007-12-06  Benjamin Mack  <mack@xnos.org>
 
-        * (bugfix) Fixed #1678: limit to language; still can delete and move content element (Thanks to Helmut Hummel)
+       * Fixed bug #1678: limit to language; still can delete and move content element (Thanks to Helmut Hummel)
 
 2007-12-02     Dmitry Dulepov  <dmitry@typo3.org>
 
@@ -36,7 +44,7 @@
 
 2007-11-09  Benjamin Mack  <mack@xnos.org>
 
-        * (bugfix) Fixed Image Generation bug. Call in t3lib_div now uses the IM wrapper to render gifs/pngs
+        * Fixed image generation bug: Call in t3lib_div now uses the IM wrapper to render gifs/pngs
 
 2007-11-07  Oliver Hader  <oh@inpublica.de>
 
 
 2007-09-18  Oliver Hader  <oh@inpublica.de>
 
-       * (minor) Fixed bug #65: Thumbnails in Element Browser are only displayed if fileSuffix is lowercase
+       * Fixed bug #65: Thumbnails in Element Browser are only displayed if fileSuffix is lowercase
 
 2007-09-09  Martin Kutschker  <martin.t.kutschker@blackbox.net>
 
 
 2007-09-03  Oliver Hader  <oh@inpublica.de>
 
-       * (minor) Fixed bug #6104: IRRE - IE7: Strange behaviour with hover event of nested Tabs/IRRE-levels with relative positioned HTML elements
-       * (minor) Fixed bug #5906: IRRE - Default values defined in TCA are not used for children (thanks to Joscha Feth and Jeff Segars)
+       * Fixed bug #6104: IRRE - IE7: Strange behaviour with hover event of nested Tabs/IRRE-levels with relative positioned HTML elements
+       * Fixed bug #5906: IRRE - Default values defined in TCA are not used for children (thanks to Joscha Feth and Jeff Segars)
 
 2007-08-15  Wolfgang Klinger  <wk@plan2.net>
 
-       * (trivial) Added is_array checks in extension manager code (committed by Stucki)
+       * Added is_array checks in extension manager code (committed by Stucki)
 
 2007-08-23  Dmitry Dulepov  <dmitry@typo3.org>
 
 
 2007-08-23  Andreas Otto  <andreas.otto@dkd.de>
 
-       * (trivial) Fixed bug #4888: Invalid argument supplied for foreach()
+       * Fixed bug #4888: Invalid argument supplied for foreach()
 
 2007-08-06  Martin Kutschker  <martin.t.kutschker@blackbox.net>
 
index d2d3484..2f60476 100755 (executable)
@@ -2354,13 +2354,15 @@ class t3lib_div {
                        curl_setopt($ch, CURLOPT_URL, $url);
                        curl_setopt($ch, CURLOPT_HEADER, $includeHeader ? 1 : 0);
                        curl_setopt($ch, CURLOPT_NOBODY, $includeHeader == 2 ? 1 : 0);
-                       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                        curl_setopt($ch, CURLOPT_FAILONERROR, 1);
                        if (is_array($requestHeaders))  {
                                curl_setopt($ch, CURLOPT_HTTPHEADER, $requestHeaders);
                        }
 
+                               // may fail (5.2.0, 5.1.5+ and 4.4.4+) when open_basedir or safe_mode are enabled
+                       @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
+
                        if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['curlProxyServer'])      {
                                curl_setopt($ch, CURLOPT_PROXY, $GLOBALS['TYPO3_CONF_VARS']['SYS']['curlProxyServer']);
 
@@ -2377,22 +2379,34 @@ class t3lib_div {
 
                } elseif ($includeHeader)       {
                        $parsedURL = parse_url($url);
-                       if (!t3lib_div::inList('ftp,ftps,http,https,gopher,telnet', $parsedURL['scheme']))      {
+                       if (!t3lib_div::inList('http,https', $parsedURL['scheme']))     {
                                return false;
                        }
+                       $port = intval($parsedURL['port']);
+                       if ($parsedURL['scheme'] == 'http')     {
+                               $port = ($port>0 ? $port : 80);
+                               $scheme = '';
+                       } else {
+                               $port = ($port>0 ? $port : 443);
+                               $scheme = 'ssl://';
+                       }
 
-                       $fp = @fsockopen($parsedURL['host'], ($parsedURL['port'] > 0 ? $parsedURL['port'] : 80), $errno, $errstr, 2.0);
-                       if (!$fp)       {
+                       $fp = @fsockopen($scheme.$parsedURL['host'], $port, $errno, $errstr, 2.0);
+                       if (!$fp || $errno > 0) {
                                return false;
                        }
 
                        $msg = 'GET ' . $parsedURL['path'] .
                                        ($parsedURL['query'] ? '?' . $parsedURL['query'] : '') .
                                        ' HTTP/1.0' . "\r\n" . 'Host: ' .
-                                       $parsedURL['host'] . "\r\n\r\n";
+                                       $parsedURL['host'] . "\r\n";
+                       if (is_array($requestHeaders))  {
+                               $msg .= implode("\r\n", $requestHeaders). "\r\n";
+                       }
+                       $msg .= "\r\n";
                        fputs($fp, $msg);
                        while (!feof($fp))      {
-                               $line = fgets($fp, 2048);
+                               $line = @fgets($fp, 2048);
                                $content.= $line;
                                if ($includeHeader == 2 && !strlen(trim($line)))        {
                                        break;  // Stop at the first empty line (= end of header)