On 07/09/2012 10:03 AM, A.L.E.C wrote:
> I think there was a similiar issue in IMAP connections handling. Please,
> try with this patch.

Please, also give a try to the attached patch. It simplifies the code
significantly and moves timeout handling to the PHP internals.

-- 
Aleksander 'A.L.E.C' Machniak
LAN Management System Developer [http://lms.org.pl]
Roundcube Webmail Developer  [http://roundcube.net]
---------------------------------------------------
PGP: 19359DC1 @@ GG: 2275252 @@ WWW: http://alec.pl
--- a/program/steps/utils/modcss.inc
+++ b/program/steps/utils/modcss.inc
@@ -19,8 +19,6 @@
  +-----------------------------------------------------------------------+
 */
 
-$source = '';
-
 $url = preg_replace('![^a-z0-9.-]!i', '', $_GET['_u']);
 if ($url === null || !($realurl = $_SESSION['modcssurls'][$url])) {
     header('HTTP/1.1 403 Forbidden');
@@ -28,71 +26,33 @@ if ($url === null || !($realurl = $_SESSION['modcssurls'][$url])) {
     exit;
 }
 
-$a_uri = parse_url($realurl);
-$port  = $a_uri['port'] ? $a_uri['port'] : 80;
-$host  = $a_uri['host'];
-$path  = $a_uri['path'] . ($a_uri['query'] ? '?'.$a_uri['query'] : '');
+$a_uri  = parse_url($realurl);
+$scheme = strtolower($a_uri['scheme']);
 
 // don't allow any other connections than http(s)
-if (strtolower(substr($a_uri['scheme'], 0, 4)) != 'http') {
+if ($scheme != 'http' && $scheme != 'https') {
     header('HTTP/1.1 403 Forbidden');
     echo "Invalid URL";
     exit;
 }
 
-// try to open socket connection
-if (!($fp = fsockopen($host, $port, $errno, $error, 15))) {
-    header('HTTP/1.1 500 Internal Server Error');
-    echo $error;
-    exit;
-}
-
-// set timeout for socket
-stream_set_timeout($fp, 30);
-
-// send request
-$out  = "GET $path HTTP/1.0\r\n";
-$out .= "Host: $host\r\n";
-$out .= "Connection: Close\r\n\r\n";
-fwrite($fp, $out);
+$options = array(
+    $scheme => array(
+        'method' => 'GET',
+        'timeout' => 30,
+    )
+);
 
-// read response
-$header = true;
-$headers = array();
-while (!feof($fp)) {
-    $line = trim(fgets($fp, 4048));
+$context = stream_context_create($options);
+$source  = file_get_contents($realurl, false, $context);
 
-    if ($header) {
-        if (preg_match('/^HTTP\/1\..\s+(\d+)/', $line, $regs)
-            && intval($regs[1]) != 200) {
-            break;
-        }
-        else if (empty($line)) {
-            $header = false;
-        }
-        else {
-            list($key, $value) = explode(': ', $line);
-            $headers[strtolower($key)] = $value;
-        }
-    }
-    else {
-        $source .= "$line\n";
-    }
-}
-fclose($fp);
-
-// check content-type header and mod styles
-$mimetype = strtolower($headers['content-type']);
-if (!empty($source) && in_array($mimetype, array('text/css','text/plain'))) {
+if (!empty($source)) {
     header('Content-Type: text/css');
     echo rcmail_mod_css_styles($source, preg_replace('/[^a-z0-9]/i', '', $_GET['_c']));
     exit;
 }
-else
-    $error = "Invalid response returned by server";
+
 
 header('HTTP/1.0 404 Not Found');
-echo $error;
+echo "Invalid response returned by server";
 exit;
-
-
_______________________________________________
Roundcube Users mailing list
[email protected]
http://lists.roundcube.net/mailman/listinfo/users

Reply via email to