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