From bef96b97929414af47311afd30fc7e8972df3192 Mon Sep 17 00:00:00 2001 From: riadhchtara Date: Sat, 21 Apr 2012 17:43:13 +0200 Subject: [PATCH 01/10] [ticket/10820] Image downloader recognize new version of ie When a user download image attachement using ie8, the file is displayed. However, when he uses ie version greater than 8, the image is download. A changes are made to phpbb/download/file.php to solve the problem. We check now if the ie version is greater or equal to 8 and not only equal to 8 PHPBB3-10820 --- phpBB/download/file.php | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/phpBB/download/file.php b/phpBB/download/file.php index bf277c69fa..d9118f70de 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -285,7 +285,7 @@ else if (($display_cat == ATTACHMENT_CATEGORY_NONE/* || $display_cat == ATTACHME $db->sql_query($sql); } -if ($display_cat == ATTACHMENT_CATEGORY_IMAGE && $mode === 'view' && (strpos($attachment['mimetype'], 'image') === 0) && ((strpos(strtolower($user->browser), 'msie') !== false) && (strpos(strtolower($user->browser), 'msie 8.0') === false))) +if ($display_cat == ATTACHMENT_CATEGORY_IMAGE && $mode === 'view' && (strpos($attachment['mimetype'], 'image') === 0) && !is_greater_ie7($user->browser)) { wrap_img_in_html(append_sid($phpbb_root_path . 'download/file.' . $phpEx, 'id=' . $attachment['attach_id']), $attachment['real_filename']); file_gc(); @@ -343,8 +343,8 @@ function send_avatar_to_browser($file, $browser) $image_data = @getimagesize($file_path); header('Content-Type: ' . image_type_to_mime_type($image_data[2])); - - if (strpos(strtolower($browser), 'msie') !== false && strpos(strtolower($browser), 'msie 8.0') === false) + + if (strpos(strtolower($browser), 'msie') !== false && !is_greater_ie7($user->browser)) { header('Content-Disposition: attachment; ' . header_filename($file)); @@ -477,10 +477,9 @@ function send_file_to_browser($attachment, $upload_dir, $category) */ // Send out the Headers. Do not set Content-Disposition to inline please, it is a security measure for users using the Internet Explorer. - $is_ie8 = (strpos(strtolower($user->browser), 'msie 8.0') !== false); header('Content-Type: ' . $attachment['mimetype']); - - if ($is_ie8) + + if (is_greater_ie7($user->browser)) { header('X-Content-Type-Options: nosniff'); } @@ -492,7 +491,7 @@ function send_file_to_browser($attachment, $upload_dir, $category) } else { - if (empty($user->browser) || (!$is_ie8 && (strpos(strtolower($user->browser), 'msie') !== false))) + if (empty($user->browser) || (!is_greater_ie7($user->browser) && (strpos(strtolower($user->browser), 'msie') !== false))) { header('Content-Disposition: attachment; ' . header_filename(htmlspecialchars_decode($attachment['real_filename']))); if (empty($user->browser) || (strpos(strtolower($user->browser), 'msie 6.0') !== false)) @@ -503,7 +502,7 @@ function send_file_to_browser($attachment, $upload_dir, $category) else { header('Content-Disposition: ' . ((strpos($attachment['mimetype'], 'image') === 0) ? 'inline' : 'attachment') . '; ' . header_filename(htmlspecialchars_decode($attachment['real_filename']))); - if ($is_ie8 && (strpos($attachment['mimetype'], 'image') !== 0)) + if (is_greater_ie7($user->browser) && (strpos($attachment['mimetype'], 'image') !== 0)) { header('X-Download-Options: noopen'); } @@ -680,7 +679,8 @@ function set_modified_headers($stamp, $browser) { // let's see if we have to send the file at all $last_load = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? strtotime(trim($_SERVER['HTTP_IF_MODIFIED_SINCE'])) : false; - if ((strpos(strtolower($browser), 'msie 6.0') === false) && (strpos(strtolower($browser), 'msie 8.0') === false)) + + if ((strpos(strtolower($browser), 'msie 6.0') === false) && (!is_greater_ie7($user->browser))) { if ($last_load !== false && $last_load >= $stamp) { @@ -709,4 +709,9 @@ function file_gc() exit; } +function is_greater_ie7($browser) +{ + return preg_match('/msie (\d{2,3}|[89]+).[0-9.]*;/', strtolower($browser)); +} + ?> \ No newline at end of file From ac56363351f5e6951e5554d30c7977507e616f4f Mon Sep 17 00:00:00 2001 From: Dhruv Date: Thu, 7 Feb 2013 23:59:46 +0530 Subject: [PATCH 02/10] [ticket/10820] proper usage of global and local variable browser PHPBB3-10820 --- phpBB/download/file.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/phpBB/download/file.php b/phpBB/download/file.php index d9118f70de..9983fe3ec6 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -344,7 +344,7 @@ function send_avatar_to_browser($file, $browser) $image_data = @getimagesize($file_path); header('Content-Type: ' . image_type_to_mime_type($image_data[2])); - if (strpos(strtolower($browser), 'msie') !== false && !is_greater_ie7($user->browser)) + if (strpos(strtolower($browser), 'msie') !== false && !is_greater_ie7($browser)) { header('Content-Disposition: attachment; ' . header_filename($file)); @@ -680,7 +680,7 @@ function set_modified_headers($stamp, $browser) // let's see if we have to send the file at all $last_load = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? strtotime(trim($_SERVER['HTTP_IF_MODIFIED_SINCE'])) : false; - if ((strpos(strtolower($browser), 'msie 6.0') === false) && (!is_greater_ie7($user->browser))) + if ((strpos(strtolower($browser), 'msie 6.0') === false) && (!is_greater_ie7($browser))) { if ($last_load !== false && $last_load >= $stamp) { From 095ac054e034ad696e5da540690078cacfda1e6d Mon Sep 17 00:00:00 2001 From: Dhruv Date: Fri, 8 Feb 2013 00:05:06 +0530 Subject: [PATCH 03/10] [ticket/10820] fix IE check function Add phpbb_ prefix to function name and return boolean value. PHPBB3-10820 --- phpBB/download/file.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/phpBB/download/file.php b/phpBB/download/file.php index 9983fe3ec6..83bcb5aacc 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -285,7 +285,7 @@ else if (($display_cat == ATTACHMENT_CATEGORY_NONE/* || $display_cat == ATTACHME $db->sql_query($sql); } -if ($display_cat == ATTACHMENT_CATEGORY_IMAGE && $mode === 'view' && (strpos($attachment['mimetype'], 'image') === 0) && !is_greater_ie7($user->browser)) +if ($display_cat == ATTACHMENT_CATEGORY_IMAGE && $mode === 'view' && (strpos($attachment['mimetype'], 'image') === 0) && !phpbb_is_greater_ie7($user->browser)) { wrap_img_in_html(append_sid($phpbb_root_path . 'download/file.' . $phpEx, 'id=' . $attachment['attach_id']), $attachment['real_filename']); file_gc(); @@ -344,7 +344,7 @@ function send_avatar_to_browser($file, $browser) $image_data = @getimagesize($file_path); header('Content-Type: ' . image_type_to_mime_type($image_data[2])); - if (strpos(strtolower($browser), 'msie') !== false && !is_greater_ie7($browser)) + if (strpos(strtolower($browser), 'msie') !== false && !phpbb_is_greater_ie7($browser)) { header('Content-Disposition: attachment; ' . header_filename($file)); @@ -479,7 +479,7 @@ function send_file_to_browser($attachment, $upload_dir, $category) // Send out the Headers. Do not set Content-Disposition to inline please, it is a security measure for users using the Internet Explorer. header('Content-Type: ' . $attachment['mimetype']); - if (is_greater_ie7($user->browser)) + if (phpbb_is_greater_ie7($user->browser)) { header('X-Content-Type-Options: nosniff'); } @@ -491,7 +491,7 @@ function send_file_to_browser($attachment, $upload_dir, $category) } else { - if (empty($user->browser) || (!is_greater_ie7($user->browser) && (strpos(strtolower($user->browser), 'msie') !== false))) + if (empty($user->browser) || (!phpbb_is_greater_ie7($user->browser) && (strpos(strtolower($user->browser), 'msie') !== false))) { header('Content-Disposition: attachment; ' . header_filename(htmlspecialchars_decode($attachment['real_filename']))); if (empty($user->browser) || (strpos(strtolower($user->browser), 'msie 6.0') !== false)) @@ -502,7 +502,7 @@ function send_file_to_browser($attachment, $upload_dir, $category) else { header('Content-Disposition: ' . ((strpos($attachment['mimetype'], 'image') === 0) ? 'inline' : 'attachment') . '; ' . header_filename(htmlspecialchars_decode($attachment['real_filename']))); - if (is_greater_ie7($user->browser) && (strpos($attachment['mimetype'], 'image') !== 0)) + if (phpbb_is_greater_ie7($user->browser) && (strpos($attachment['mimetype'], 'image') !== 0)) { header('X-Download-Options: noopen'); } @@ -680,7 +680,7 @@ function set_modified_headers($stamp, $browser) // let's see if we have to send the file at all $last_load = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? strtotime(trim($_SERVER['HTTP_IF_MODIFIED_SINCE'])) : false; - if ((strpos(strtolower($browser), 'msie 6.0') === false) && (!is_greater_ie7($browser))) + if ((strpos(strtolower($browser), 'msie 6.0') === false) && (!phpbb_is_greater_ie7($browser))) { if ($last_load !== false && $last_load >= $stamp) { @@ -709,9 +709,9 @@ function file_gc() exit; } -function is_greater_ie7($browser) +function phpbb_is_greater_ie7($browser) { - return preg_match('/msie (\d{2,3}|[89]+).[0-9.]*;/', strtolower($browser)); + return (bool) preg_match('/msie (\d{2,3}|[89]+).[0-9.]*;/', strtolower($browser)); } ?> \ No newline at end of file From adb2441f2207b3092537e96475353a2e0475a961 Mon Sep 17 00:00:00 2001 From: Dhruv Date: Fri, 8 Feb 2013 13:58:41 +0530 Subject: [PATCH 04/10] [ticket/10820] add function docblock PHPBB3-10820 --- phpBB/download/file.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/phpBB/download/file.php b/phpBB/download/file.php index 83bcb5aacc..c6a89656af 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -709,6 +709,10 @@ function file_gc() exit; } +/** +* Check if the browser is internet explorer version 7+ +* @returns true if ie7+ +*/ function phpbb_is_greater_ie7($browser) { return (bool) preg_match('/msie (\d{2,3}|[89]+).[0-9.]*;/', strtolower($browser)); From 79a740bb80c92a5374e065278b786a83847b4007 Mon Sep 17 00:00:00 2001 From: Dhruv Date: Mon, 4 Mar 2013 22:44:19 +0530 Subject: [PATCH 05/10] [ticket/10820] remove unnecessary condition checks PHPBB3-10820 --- phpBB/download/file.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/phpBB/download/file.php b/phpBB/download/file.php index c6a89656af..52e669f2cc 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -344,7 +344,7 @@ function send_avatar_to_browser($file, $browser) $image_data = @getimagesize($file_path); header('Content-Type: ' . image_type_to_mime_type($image_data[2])); - if (strpos(strtolower($browser), 'msie') !== false && !phpbb_is_greater_ie7($browser)) + if (!phpbb_is_greater_ie7($browser)) { header('Content-Disposition: attachment; ' . header_filename($file)); @@ -491,7 +491,7 @@ function send_file_to_browser($attachment, $upload_dir, $category) } else { - if (empty($user->browser) || (!phpbb_is_greater_ie7($user->browser) && (strpos(strtolower($user->browser), 'msie') !== false))) + if (empty($user->browser) || !phpbb_is_greater_ie7($user->browser)) { header('Content-Disposition: attachment; ' . header_filename(htmlspecialchars_decode($attachment['real_filename']))); if (empty($user->browser) || (strpos(strtolower($user->browser), 'msie 6.0') !== false)) From 0ad48d7ea10316d7ae3b897e6fa8cbdda3f7eebc Mon Sep 17 00:00:00 2001 From: Dhruv Date: Sat, 13 Apr 2013 22:48:09 +0530 Subject: [PATCH 06/10] [ticket/10820] Use singular return PHPBB3-10820 --- phpBB/download/file.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpBB/download/file.php b/phpBB/download/file.php index 52e669f2cc..d22885c303 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -711,7 +711,7 @@ function file_gc() /** * Check if the browser is internet explorer version 7+ -* @returns true if ie7+ +* @return true if ie7+ */ function phpbb_is_greater_ie7($browser) { From 8d1bbc1e7f3bc8366ed127bd129c239f1b62b5c1 Mon Sep 17 00:00:00 2001 From: Dhruv Date: Sat, 13 Apr 2013 22:50:37 +0530 Subject: [PATCH 07/10] [ticket/10820] simplify regex and escape dot PHPBB3-10820 --- phpBB/download/file.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpBB/download/file.php b/phpBB/download/file.php index d22885c303..4b2f34f94d 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -715,7 +715,7 @@ function file_gc() */ function phpbb_is_greater_ie7($browser) { - return (bool) preg_match('/msie (\d{2,3}|[89]+).[0-9.]*;/', strtolower($browser)); + return (bool) preg_match('/msie [^67]+\\.*;/', strtolower($browser)); } ?> \ No newline at end of file From f0f28f261c243ae57e13349ebc386a83c689a568 Mon Sep 17 00:00:00 2001 From: Dhruv Date: Sat, 27 Apr 2013 20:57:51 +0530 Subject: [PATCH 08/10] [ticket/10820] add param and return to function Add param and return in function docblock. Rename function parameter to $user_agent. PHPBB3-10820 --- phpBB/download/file.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/phpBB/download/file.php b/phpBB/download/file.php index 4b2f34f94d..378c6e64b1 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -711,11 +711,14 @@ function file_gc() /** * Check if the browser is internet explorer version 7+ -* @return true if ie7+ +* +* @param string $user_agent User agent HTTP header +* +* @return bool true if ie7+ */ -function phpbb_is_greater_ie7($browser) +function phpbb_is_greater_ie7($user_agent) { - return (bool) preg_match('/msie [^67]+\\.*;/', strtolower($browser)); + return (bool) preg_match('/msie [^67]+\\.*;/', strtolower($user_agent)); } ?> \ No newline at end of file From 8c9786c504216fae68b1558a4386a207ea036962 Mon Sep 17 00:00:00 2001 From: Dhruv Date: Sat, 27 Apr 2013 21:33:30 +0530 Subject: [PATCH 09/10] [ticket/10820] fix docblock PHPBB3-10820 --- phpBB/download/file.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpBB/download/file.php b/phpBB/download/file.php index 378c6e64b1..bd87f609e9 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -714,7 +714,7 @@ function file_gc() * * @param string $user_agent User agent HTTP header * -* @return bool true if ie7+ +* @return bool true if internet explorer version is greater than 7 */ function phpbb_is_greater_ie7($user_agent) { From b39e6e01b291f7a20a143ae3aea1a9582b0c4cad Mon Sep 17 00:00:00 2001 From: Dhruv Date: Sat, 27 Apr 2013 23:24:22 +0530 Subject: [PATCH 10/10] [ticket/10820] remove unnecessary parentheses PHPBB3-10820 --- phpBB/download/file.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpBB/download/file.php b/phpBB/download/file.php index bd87f609e9..2568455e53 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -680,7 +680,7 @@ function set_modified_headers($stamp, $browser) // let's see if we have to send the file at all $last_load = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? strtotime(trim($_SERVER['HTTP_IF_MODIFIED_SINCE'])) : false; - if ((strpos(strtolower($browser), 'msie 6.0') === false) && (!phpbb_is_greater_ie7($browser))) + if (strpos(strtolower($browser), 'msie 6.0') === false && !phpbb_is_greater_ie7($browser)) { if ($last_load !== false && $last_load >= $stamp) {