aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/avatar/driver/remote.php
diff options
context:
space:
mode:
authorNathan Guse <nathaniel.guse@gmail.com>2013-11-04 10:22:28 -0800
committerNathan Guse <nathaniel.guse@gmail.com>2013-11-04 10:22:28 -0800
commitcc54e6a9e58cb57fad87fc5b17e3c885531bc4e6 (patch)
treebae23fdc934686b46767aa8233b5310012bc9e1f /phpBB/phpbb/avatar/driver/remote.php
parentad69d5af8aa3907579a044283e4dcd6cda9f64da (diff)
parent9b0b5481fe05b10a254861495280d04721e8d9d1 (diff)
downloadforums-cc54e6a9e58cb57fad87fc5b17e3c885531bc4e6.tar
forums-cc54e6a9e58cb57fad87fc5b17e3c885531bc4e6.tar.gz
forums-cc54e6a9e58cb57fad87fc5b17e3c885531bc4e6.tar.bz2
forums-cc54e6a9e58cb57fad87fc5b17e3c885531bc4e6.tar.xz
forums-cc54e6a9e58cb57fad87fc5b17e3c885531bc4e6.zip
Merge pull request #1819 from marc1706/ticket/11534
[ticket/11534] Check remote avatar content type if possible
Diffstat (limited to 'phpBB/phpbb/avatar/driver/remote.php')
-rw-r--r--phpBB/phpbb/avatar/driver/remote.php31
1 files changed, 31 insertions, 0 deletions
diff --git a/phpBB/phpbb/avatar/driver/remote.php b/phpBB/phpbb/avatar/driver/remote.php
index 12cbd883f4..22d50c703e 100644
--- a/phpBB/phpbb/avatar/driver/remote.php
+++ b/phpBB/phpbb/avatar/driver/remote.php
@@ -117,6 +117,37 @@ class remote extends \phpbb\avatar\driver\driver
$types = \fileupload::image_types();
$extension = strtolower(\filespec::get_extension($url));
+ // Check if this is actually an image
+ if ($file_stream = @fopen($url, 'r'))
+ {
+ // Timeout after 1 second
+ stream_set_timeout($file_stream, 1);
+ $meta = stream_get_meta_data($file_stream);
+ foreach ($meta['wrapper_data'] as $header)
+ {
+ $header = preg_split('/ /', $header, 2);
+ if (strtr(strtolower(trim($header[0], ':')), '_', '-') === 'content-type')
+ {
+ if (strpos($header[1], 'image/') !== 0)
+ {
+ $error[] = 'AVATAR_URL_INVALID';
+ fclose($file_stream);
+ return false;
+ }
+ else
+ {
+ fclose($file_stream);
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ $error[] = 'AVATAR_URL_INVALID';
+ return false;
+ }
+
if (!empty($image_data) && (!isset($types[$image_data[2]]) || !in_array($extension, $types[$image_data[2]])))
{
if (!isset($types[$image_data[2]]))