From c6efcf5e6d11a0f236daff3aa3bd6532c77726d3 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Mon, 12 Jan 2015 05:44:28 -0500
Subject: [PATCH] Fix blocked.gif image usage with assets_dir set
---
CHANGELOG | 1 +
program/steps/mail/compose.inc | 26 ++++++++++++++++++++------
program/include/rcmail.php | 23 +++++++++++++++++++++++
program/steps/mail/func.inc | 2 +-
program/steps/mail/get.inc | 4 +++-
5 files changed, 48 insertions(+), 8 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index b9d4e41..3029af2 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
+- Fix blocked.gif image usage with assets_dir set
- Fix bug where max_group_members was ignored when adding a new contact (#1490214)
- Hide MDN and DSN options in compose if disabled by admin (#1490221)
- Fix checks based on window.ActiveXObject in IE > 10
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index a16319f..2327109 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -2284,6 +2284,29 @@
return $result;
}
+ /**
+ * Get resource file content (with assets_dir support)
+ *
+ * @param string $name File name
+ */
+ public function get_resource_content($name)
+ {
+ if (!strpos($name, '/')) {
+ $name = "program/resources/$name";
+ }
+
+ $assets_dir = $this->config->get('assets_dir');
+
+ if ($assets_dir) {
+ $path = slashify($assets_dir) . $name;
+ if (@file_exists($path)) {
+ $name = $path;
+ }
+ }
+
+ return file_get_contents($name, false);
+ }
+
/************************************************************************
********* Deprecated methods (to be removed) *********
diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index 20a27ec..d4db232 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -781,12 +781,13 @@
unset($plugin);
// add blocked.gif attachment (#1486516)
- if ($isHtml && preg_match('#<img src="\./program/resources/blocked\.gif"#', $body)) {
- if ($attachment = rcmail_save_image('program/resources/blocked.gif', 'image/gif')) {
+ if ($isHtml && preg_match('#<img src="program/resources/blocked\.gif"#', $body)) {
+ $content = $RCMAIL->get_resource_content('blocked.gif');
+ if ($content && ($attachment = rcmail_save_image('blocked.gif', 'image/gif', $content))) {
$COMPOSE['attachments'][$attachment['id']] = $attachment;
$url = sprintf('%s&_id=%s&_action=display-attachment&_file=rcmfile%s',
$RCMAIL->comm_path, $COMPOSE['id'], $attachment['id']);
- $body = preg_replace('#\./program/resources/blocked\.gif#', $url, $body);
+ $body = preg_replace('#program/resources/blocked\.gif#', $url, $body);
}
}
@@ -1400,18 +1401,31 @@
return false;
}
-function rcmail_save_image($path, $mimetype='')
+function rcmail_save_image($path, $mimetype = '', $data = null)
{
global $COMPOSE;
// handle attachments in memory
- $data = file_get_contents($path);
+ if (empty($data)) {
+ $data = file_get_contents($path);
+ $is_file = true;
+ }
+
$name = rcmail_basename($path);
+
+ if (empty($mimetype)) {
+ if ($is_file) {
+ $mimetype = rcube_mime::file_content_type($path, $name);
+ }
+ else {
+ $mimetype = rcube_mime::file_content_type($data, $name, 'application/octet-stream', true);
+ }
+ }
$attachment = array(
'group' => $COMPOSE['id'],
'name' => $name,
- 'mimetype' => $mimetype ? $mimetype : rcube_mime::file_content_type($path, $name),
+ 'mimetype' => $mimetype,
'data' => $data,
'size' => strlen($data),
);
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index 6423636..48d9899 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -815,7 +815,7 @@
$wash_opts = array(
'show_washed' => false,
'allow_remote' => $p['safe'],
- 'blocked_src' => "./program/resources/blocked.gif",
+ 'blocked_src' => 'program/resources/blocked.gif',
'charset' => RCUBE_CHARSET,
'cid_map' => $cid_replaces,
'html_elements' => array('body'),
diff --git a/program/steps/mail/get.inc b/program/steps/mail/get.inc
index 775349d..150737a 100644
--- a/program/steps/mail/get.inc
+++ b/program/steps/mail/get.inc
@@ -183,10 +183,12 @@
// send blocked.gif for expected images
if (empty($_REQUEST['_mimewarning']) && strpos($mimetype, 'image/') === 0) {
// Do not cache. Failure might be the result of a misconfiguration, thus real content should be returned once fixed.
+ $content = $RCMAIL->get_resource_content('blocked.gif');
$OUTPUT->nocacheing_headers();
header("Content-Type: image/gif");
header("Content-Transfer-Encoding: binary");
- readfile(INSTALL_PATH . 'program/resources/blocked.gif');
+ header("Content-Length: " . strlen($content));
+ echo $content;
}
else { // html warning with a button to load the file anyway
$OUTPUT = new rcmail_html_page();
--
Gitblit v1.9.1