From bef96b97929414af47311afd30fc7e8972df3192 Mon Sep 17 00:00:00 2001
From: riadhchtara <riadh.chtara@gmail.com>
Date: Sat, 21 Apr 2012 17:43:13 +0200
Subject: [PATCH 01/34] [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 <dhruv.goel92@gmail.com>
Date: Thu, 7 Feb 2013 23:59:46 +0530
Subject: [PATCH 02/34] [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 <dhruv.goel92@gmail.com>
Date: Fri, 8 Feb 2013 00:05:06 +0530
Subject: [PATCH 03/34] [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 <dhruv.goel92@gmail.com>
Date: Fri, 8 Feb 2013 13:58:41 +0530
Subject: [PATCH 04/34] [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 <dhruv.goel92@gmail.com>
Date: Mon, 4 Mar 2013 22:44:19 +0530
Subject: [PATCH 05/34] [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 <dhruv.goel92@gmail.com>
Date: Sat, 13 Apr 2013 22:48:09 +0530
Subject: [PATCH 06/34] [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 <dhruv.goel92@gmail.com>
Date: Sat, 13 Apr 2013 22:50:37 +0530
Subject: [PATCH 07/34] [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 <dhruv.goel92@gmail.com>
Date: Sat, 27 Apr 2013 20:57:51 +0530
Subject: [PATCH 08/34] [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 <dhruv.goel92@gmail.com>
Date: Sat, 27 Apr 2013 21:33:30 +0530
Subject: [PATCH 09/34] [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 <dhruv.goel92@gmail.com>
Date: Sat, 27 Apr 2013 23:24:22 +0530
Subject: [PATCH 10/34] [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)
 		{

From 679183385fc070269ea2356722eff0f3b6defdfc Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Mon, 29 Apr 2013 02:25:22 +0530
Subject: [PATCH 11/34] [ticket/10820] add unit tests for phpbb_is_greater_ie7

PHPBB3-10820
---
 tests/download/http_user_agent_test.php | 65 +++++++++++++++++++++++++
 1 file changed, 65 insertions(+)
 create mode 100644 tests/download/http_user_agent_test.php

diff --git a/tests/download/http_user_agent_test.php b/tests/download/http_user_agent_test.php
new file mode 100644
index 0000000000..601561f44e
--- /dev/null
+++ b/tests/download/http_user_agent_test.php
@@ -0,0 +1,65 @@
+<?php
+/**
+*
+* @package testing
+* @copyright (c) 2010 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+require_once dirname(__FILE__) . '/../../phpBB/includes/functions_download.php';
+
+class phpbb_download_http_user_agent_test extends phpbb_test_case
+{
+	public function user_agents()
+	{
+		return array(
+			// user agent
+			// expected
+			array(
+				'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
+				true,
+			),
+			array(
+				'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)',
+				true,
+			),
+			array(
+				'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)',
+				true,
+			),
+			array(
+				'Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)',
+				false,
+			),
+			array(
+				'Mozilla/4.0 (compatible; MSIE 6.1; Windows XP; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
+				false,
+			),
+			array(
+				'Mozilla/4.0 (compatible; MSIE 6.01; Windows NT 6.0)',
+				false,
+			),
+			array(
+				'Mozilla/5.0 (Windows; U; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)',
+				false,
+			),
+			array(
+				'Mozilla/5.0 (Windows NT 6.2; Win64; x64;) Gecko/20100101 Firefox/20.0',
+				false,
+			),
+			array(
+				'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36',
+				false,
+			),
+		);
+	}
+
+	/**
+	* @dataProvider user_agents
+	*/
+	public function test_is_greater_ie7($user_agent, $expected)
+	{
+		$this->assertEquals($expected, phpbb_is_greater_ie7($user_agent));
+	}
+}

From bcd6f79d5c3e3db5ae60098526d93b477cc9eed9 Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Sun, 12 May 2013 15:57:13 +0530
Subject: [PATCH 12/34] [ticket/10820] Add test cases

PHPBB3-10325
---
 tests/download/http_user_agent_test.php | 32 +++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/tests/download/http_user_agent_test.php b/tests/download/http_user_agent_test.php
index 601561f44e..e08fb7a3f1 100644
--- a/tests/download/http_user_agent_test.php
+++ b/tests/download/http_user_agent_test.php
@@ -52,6 +52,38 @@ class phpbb_download_http_user_agent_test extends phpbb_test_case
 				'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36',
 				false,
 			),
+			array(
+				'Googlebot-Image/1.0',
+				false,
+			),
+			array(
+				'Googlebot/2.1 ( http://www.google.com/bot.html)',
+				false,
+			),
+			array(
+				'Lynx/2.8.3dev.9 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.6',
+				false,
+			),
+			array(
+				'Links (0.9x; Linux 2.4.7-10 i686)',
+				false,
+			),
+			array(
+				'Opera/9.60 (Windows NT 5.1; U; de) Presto/2.1.1',
+				false,
+			),
+			array(
+				'Mozilla/4.0 (compatible; MSIE 5.0; Windows NT;)',
+				false,
+			),
+			array(
+				'Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 4.0) Opera 6.01 [en]',
+				false,
+			),
+			array(
+				'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.24',
+				false,
+			),
 		);
 	}
 

From cae8c3603758cff7a75d8bbb3b5d15bae38e5692 Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Sun, 12 May 2013 16:03:48 +0530
Subject: [PATCH 13/34] [ticket/10820] fix regex Extract IE version from user
 agent string and then compare it with 7

PHPBB3-10820
---
 phpBB/download/file.php | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/phpBB/download/file.php b/phpBB/download/file.php
index 2568455e53..d9ebaa4281 100644
--- a/phpBB/download/file.php
+++ b/phpBB/download/file.php
@@ -718,7 +718,15 @@ function file_gc()
 */
 function phpbb_is_greater_ie7($user_agent)
 {
-	return (bool) preg_match('/msie [^67]+\\.*;/', strtolower($user_agent));
+	if (preg_match('/msie (\d+)/', strtolower($user_agent), $matches))
+	{
+		$ie_version = (int) $matches[1];
+		return ($ie_version > 7);
+	}
+	else
+	{
+		return false;
+	}
 }
 
 ?>
\ No newline at end of file

From 56e27a9908b759b9ec1aadb6f58a2f0f1b4f3ab3 Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Wed, 5 Jun 2013 00:14:46 +0530
Subject: [PATCH 14/34] [ticket/10820] Inject IE version in function

PHPBB3-10820
---
 phpBB/download/file.php | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/phpBB/download/file.php b/phpBB/download/file.php
index d9ebaa4281..c296ddce7e 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) && !phpbb_is_greater_ie7($user->browser))
+if ($display_cat == ATTACHMENT_CATEGORY_IMAGE && $mode === 'view' && (strpos($attachment['mimetype'], 'image') === 0) && !phpbb_is_greater_ie_version($user->browser, 7))
 {
 	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 (!phpbb_is_greater_ie7($browser))
+		if (!phpbb_is_greater_ie_version($browser, 7))
 		{
 			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 (phpbb_is_greater_ie7($user->browser))
+	if (phpbb_is_greater_ie_version($user->browser, 7))
 	{
 		header('X-Content-Type-Options: nosniff');
 	}
@@ -491,7 +491,7 @@ function send_file_to_browser($attachment, $upload_dir, $category)
 	}
 	else
 	{
-		if (empty($user->browser) || !phpbb_is_greater_ie7($user->browser))
+		if (empty($user->browser) || !phpbb_is_greater_ie_version($user->browser, 7))
 		{
 			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 (phpbb_is_greater_ie7($user->browser) && (strpos($attachment['mimetype'], 'image') !== 0))
+			if (phpbb_is_greater_ie_version($user->browser, 7) && (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 && !phpbb_is_greater_ie7($browser))
+	if (strpos(strtolower($browser), 'msie 6.0') === false && !phpbb_is_greater_ie_version($browser, 7))
 	{
 		if ($last_load !== false && $last_load >= $stamp)
 		{
@@ -713,15 +713,16 @@ function file_gc()
 * Check if the browser is internet explorer version 7+
 *
 * @param string $user_agent	User agent HTTP header
+* @param int $version IE version to check against
 *
 * @return bool true if internet explorer version is greater than 7
 */
-function phpbb_is_greater_ie7($user_agent)
+function phpbb_is_greater_ie_version($user_agent, $version)
 {
 	if (preg_match('/msie (\d+)/', strtolower($user_agent), $matches))
 	{
 		$ie_version = (int) $matches[1];
-		return ($ie_version > 7);
+		return ($ie_version > $version);
 	}
 	else
 	{

From 7abc85cedac4fdde514f740dfaad24b2414ebce8 Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Wed, 5 Jun 2013 00:29:07 +0530
Subject: [PATCH 15/34] [ticket/10820] Change function call in tests

PHPBB3-10820
---
 tests/download/http_user_agent_test.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/download/http_user_agent_test.php b/tests/download/http_user_agent_test.php
index e08fb7a3f1..d85e7b0d08 100644
--- a/tests/download/http_user_agent_test.php
+++ b/tests/download/http_user_agent_test.php
@@ -92,6 +92,6 @@ class phpbb_download_http_user_agent_test extends phpbb_test_case
 	*/
 	public function test_is_greater_ie7($user_agent, $expected)
 	{
-		$this->assertEquals($expected, phpbb_is_greater_ie7($user_agent));
+		$this->assertEquals($expected, phpbb_is_greater_ie_version($user_agent, 7));
 	}
 }

From a8a1c75a70c0c167ea3f6831a9800a27525c7d89 Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Wed, 5 Jun 2013 00:29:34 +0530
Subject: [PATCH 16/34] [ticket/10820] Fix copyright

PHPBB3-10820
---
 tests/download/http_user_agent_test.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/download/http_user_agent_test.php b/tests/download/http_user_agent_test.php
index d85e7b0d08..4e759e990d 100644
--- a/tests/download/http_user_agent_test.php
+++ b/tests/download/http_user_agent_test.php
@@ -2,7 +2,7 @@
 /**
 *
 * @package testing
-* @copyright (c) 2010 phpBB Group
+* @copyright (c) 2013 phpBB Group
 * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
 *
 */

From a8bb0330959e67e2e7a81bffdedc46d626912f3e Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Wed, 5 Jun 2013 00:57:25 +0530
Subject: [PATCH 17/34] [ticket/10820] Rename function

PHPBB3-10820
---
 tests/download/http_user_agent_test.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/download/http_user_agent_test.php b/tests/download/http_user_agent_test.php
index 4e759e990d..179477f36a 100644
--- a/tests/download/http_user_agent_test.php
+++ b/tests/download/http_user_agent_test.php
@@ -11,7 +11,7 @@ require_once dirname(__FILE__) . '/../../phpBB/includes/functions_download.php';
 
 class phpbb_download_http_user_agent_test extends phpbb_test_case
 {
-	public function user_agents()
+	public function user_agents_check_greater_ie7()
 	{
 		return array(
 			// user agent
@@ -88,7 +88,7 @@ class phpbb_download_http_user_agent_test extends phpbb_test_case
 	}
 
 	/**
-	* @dataProvider user_agents
+	* @dataProvider user_agents_check_greater_ie7
 	*/
 	public function test_is_greater_ie7($user_agent, $expected)
 	{

From db5bff87157818e424e1717e3047606f53ca3807 Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Wed, 5 Jun 2013 02:22:51 +0530
Subject: [PATCH 18/34] [ticket/10820] Add test cases More test cases to check
 against different versions

PHPBB3-10820
---
 tests/download/http_user_agent_test.php | 41 ++++++++++++++++++++++---
 1 file changed, 37 insertions(+), 4 deletions(-)

diff --git a/tests/download/http_user_agent_test.php b/tests/download/http_user_agent_test.php
index 179477f36a..166a186913 100644
--- a/tests/download/http_user_agent_test.php
+++ b/tests/download/http_user_agent_test.php
@@ -11,87 +11,120 @@ require_once dirname(__FILE__) . '/../../phpBB/includes/functions_download.php';
 
 class phpbb_download_http_user_agent_test extends phpbb_test_case
 {
-	public function user_agents_check_greater_ie7()
+	public function user_agents_check_greater_ie_version()
 	{
 		return array(
 			// user agent
+			// IE version
 			// expected
 			array(
 				'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
+				7,
 				true,
 			),
 			array(
 				'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)',
+				7,
 				true,
 			),
 			array(
 				'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)',
+				7,
 				true,
 			),
 			array(
 				'Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)',
+				7,
 				false,
 			),
 			array(
 				'Mozilla/4.0 (compatible; MSIE 6.1; Windows XP; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
+				7,
 				false,
 			),
 			array(
 				'Mozilla/4.0 (compatible; MSIE 6.01; Windows NT 6.0)',
+				7,
 				false,
 			),
 			array(
 				'Mozilla/5.0 (Windows; U; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)',
+				7,
 				false,
 			),
 			array(
 				'Mozilla/5.0 (Windows NT 6.2; Win64; x64;) Gecko/20100101 Firefox/20.0',
+				7,
 				false,
 			),
 			array(
 				'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36',
+				7,
 				false,
 			),
 			array(
 				'Googlebot-Image/1.0',
+				7,
 				false,
 			),
 			array(
 				'Googlebot/2.1 ( http://www.google.com/bot.html)',
+				7,
 				false,
 			),
 			array(
 				'Lynx/2.8.3dev.9 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.6',
+				7,
 				false,
 			),
 			array(
 				'Links (0.9x; Linux 2.4.7-10 i686)',
+				7,
 				false,
 			),
 			array(
 				'Opera/9.60 (Windows NT 5.1; U; de) Presto/2.1.1',
+				7,
 				false,
 			),
 			array(
 				'Mozilla/4.0 (compatible; MSIE 5.0; Windows NT;)',
+				7,
 				false,
 			),
 			array(
 				'Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 4.0) Opera 6.01 [en]',
+				7,
 				false,
 			),
 			array(
 				'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.24',
+				7,
+				false,
+			),
+			array(
+				'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
+				8,
+				true,
+			),
+			array(
+				'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)',
+				9,
+				true,
+			),
+			array(
+				'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)',
+				10,
 				false,
 			),
 		);
 	}
 
 	/**
-	* @dataProvider user_agents_check_greater_ie7
+	* @dataProvider user_agents_check_greater_ie_version
 	*/
-	public function test_is_greater_ie7($user_agent, $expected)
+	public function test_is_greater_ie_version($user_agent, $version, $expected)
 	{
-		$this->assertEquals($expected, phpbb_is_greater_ie_version($user_agent, 7));
+		$this->assertEquals($expected, phpbb_is_greater_ie_version($user_agent, $version));
 	}
 }

From 96cf03f2001dc71b9cea934a37b8d38e77545735 Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Sat, 8 Jun 2013 23:13:45 +0530
Subject: [PATCH 19/34] [ticket/10820] Fix function 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 c296ddce7e..b22347e0cf 100644
--- a/phpBB/download/file.php
+++ b/phpBB/download/file.php
@@ -715,7 +715,7 @@ function file_gc()
 * @param string $user_agent	User agent HTTP header
 * @param int $version IE version to check against
 *
-* @return bool true if internet explorer version is greater than 7
+* @return bool true if internet explorer version is greater than $version
 */
 function phpbb_is_greater_ie_version($user_agent, $version)
 {

From fbebc2874fb7f9462b7cf2481a14166cfb906297 Mon Sep 17 00:00:00 2001
From: riadhchtara <riadh.chtara@gmail.com>
Date: Sat, 21 Apr 2012 17:43:13 +0200
Subject: [PATCH 20/34] [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 3ceb1ee0cc..b942c92a1c 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 80d164b12151c3b3d5eb42d1874a0a1d3b288d12 Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Thu, 7 Feb 2013 23:59:46 +0530
Subject: [PATCH 21/34] [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 b942c92a1c..6764ee7eac 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 9236f12577087e5b800b9c23e988a671702f1a9e Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Fri, 8 Feb 2013 00:05:06 +0530
Subject: [PATCH 22/34] [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 6764ee7eac..af41951c46 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 875914767414da7ef7076f444542c09bd0b83c72 Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Fri, 8 Feb 2013 13:58:41 +0530
Subject: [PATCH 23/34] [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 af41951c46..abab473bf2 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 07c62dd64f65551012bd942be29179cfae99d7ab Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Mon, 4 Mar 2013 22:44:19 +0530
Subject: [PATCH 24/34] [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 abab473bf2..8bb77efe4d 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 364828de24c14a73d98621b545f7732c18b18a4d Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Sat, 13 Apr 2013 22:48:09 +0530
Subject: [PATCH 25/34] [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 8bb77efe4d..20d3e60580 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 687b04bcfc7a4dac8c53e9dbf5e7c31347d9d474 Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Sat, 13 Apr 2013 22:50:37 +0530
Subject: [PATCH 26/34] [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 20d3e60580..5b274160e8 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 ea7ece5d252fa8ede7d611abc812f8abc93c011d Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Sat, 27 Apr 2013 20:57:51 +0530
Subject: [PATCH 27/34] [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 5b274160e8..081f18b15c 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 5ebebbd7190fb5e541df9956b5d58983765d931b Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Sat, 27 Apr 2013 21:33:30 +0530
Subject: [PATCH 28/34] [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 081f18b15c..cba4ef3b7b 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 8f733cc658e20da74e910f3e36edcfdf86a7eba3 Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Sat, 27 Apr 2013 23:24:22 +0530
Subject: [PATCH 29/34] [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 cba4ef3b7b..f781480bb7 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)
 		{

From 6b5780b753a857dec087d363601e54f1515213fa Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Sun, 12 May 2013 16:03:48 +0530
Subject: [PATCH 30/34] [ticket/10820] fix regex Extract IE version from user
 agent string and then compare it with 7

PHPBB3-10820
---
 phpBB/download/file.php | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/phpBB/download/file.php b/phpBB/download/file.php
index f781480bb7..abc67ecdac 100644
--- a/phpBB/download/file.php
+++ b/phpBB/download/file.php
@@ -718,7 +718,15 @@ function file_gc()
 */
 function phpbb_is_greater_ie7($user_agent)
 {
-	return (bool) preg_match('/msie [^67]+\\.*;/', strtolower($user_agent));
+	if (preg_match('/msie (\d+)/', strtolower($user_agent), $matches))
+	{
+		$ie_version = (int) $matches[1];
+		return ($ie_version > 7);
+	}
+	else
+	{
+		return false;
+	}
 }
 
 ?>
\ No newline at end of file

From 11cd9f901e53c2e1fe2aa1f3ce5d1f0c445d7ba7 Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Wed, 5 Jun 2013 00:14:46 +0530
Subject: [PATCH 31/34] [ticket/10820] Inject IE version in function

PHPBB3-10820
---
 phpBB/download/file.php | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/phpBB/download/file.php b/phpBB/download/file.php
index abc67ecdac..009fa3572a 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) && !phpbb_is_greater_ie7($user->browser))
+if ($display_cat == ATTACHMENT_CATEGORY_IMAGE && $mode === 'view' && (strpos($attachment['mimetype'], 'image') === 0) && !phpbb_is_greater_ie_version($user->browser, 7))
 {
 	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 (!phpbb_is_greater_ie7($browser))
+		if (!phpbb_is_greater_ie_version($browser, 7))
 		{
 			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 (phpbb_is_greater_ie7($user->browser))
+	if (phpbb_is_greater_ie_version($user->browser, 7))
 	{
 		header('X-Content-Type-Options: nosniff');
 	}
@@ -491,7 +491,7 @@ function send_file_to_browser($attachment, $upload_dir, $category)
 	}
 	else
 	{
-		if (empty($user->browser) || !phpbb_is_greater_ie7($user->browser))
+		if (empty($user->browser) || !phpbb_is_greater_ie_version($user->browser, 7))
 		{
 			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 (phpbb_is_greater_ie7($user->browser) && (strpos($attachment['mimetype'], 'image') !== 0))
+			if (phpbb_is_greater_ie_version($user->browser, 7) && (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 && !phpbb_is_greater_ie7($browser))
+	if (strpos(strtolower($browser), 'msie 6.0') === false && !phpbb_is_greater_ie_version($browser, 7))
 	{
 		if ($last_load !== false && $last_load >= $stamp)
 		{
@@ -713,15 +713,16 @@ function file_gc()
 * Check if the browser is internet explorer version 7+
 *
 * @param string $user_agent	User agent HTTP header
+* @param int $version IE version to check against
 *
 * @return bool true if internet explorer version is greater than 7
 */
-function phpbb_is_greater_ie7($user_agent)
+function phpbb_is_greater_ie_version($user_agent, $version)
 {
 	if (preg_match('/msie (\d+)/', strtolower($user_agent), $matches))
 	{
 		$ie_version = (int) $matches[1];
-		return ($ie_version > 7);
+		return ($ie_version > $version);
 	}
 	else
 	{

From e0b9cdf708cf75ac189b935dad3e816a1363de3a Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Sat, 8 Jun 2013 23:13:45 +0530
Subject: [PATCH 32/34] [ticket/10820] Fix function 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 009fa3572a..e06fd117cf 100644
--- a/phpBB/download/file.php
+++ b/phpBB/download/file.php
@@ -715,7 +715,7 @@ function file_gc()
 * @param string $user_agent	User agent HTTP header
 * @param int $version IE version to check against
 *
-* @return bool true if internet explorer version is greater than 7
+* @return bool true if internet explorer version is greater than $version
 */
 function phpbb_is_greater_ie_version($user_agent, $version)
 {

From 48f764437f3398696ad21177da02e024cc5804e5 Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Thu, 13 Jun 2013 21:47:37 +0530
Subject: [PATCH 33/34] [ticket/10820] Add additional check for IE in condition

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 e06fd117cf..318e893fab 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) && !phpbb_is_greater_ie_version($user->browser, 7))
+if ($display_cat == ATTACHMENT_CATEGORY_IMAGE && $mode === 'view' && (strpos($attachment['mimetype'], 'image') === 0) && (strpos(strtolower($browser), 'msie') !== false) && !phpbb_is_greater_ie_version($user->browser, 7))
 {
 	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 (!phpbb_is_greater_ie_version($browser, 7))
+		if ((strpos(strtolower($browser), 'msie') !== false) && !phpbb_is_greater_ie_version($browser, 7))
 		{
 			header('Content-Disposition: attachment; ' . header_filename($file));
 

From de150cb4ad4b26ab51bcf60bd4377870e6b3866b Mon Sep 17 00:00:00 2001
From: Dhruv <dhruv.goel92@gmail.com>
Date: Fri, 14 Jun 2013 00:29:06 +0530
Subject: [PATCH 34/34] [ticket/10820] fix if condition to check for IE

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 318e893fab..22be27c922 100644
--- a/phpBB/download/file.php
+++ b/phpBB/download/file.php
@@ -491,7 +491,7 @@ function send_file_to_browser($attachment, $upload_dir, $category)
 	}
 	else
 	{
-		if (empty($user->browser) || !phpbb_is_greater_ie_version($user->browser, 7))
+		if (empty($user->browser) || ((strpos(strtolower($user->browser), 'msie') !== false) && !phpbb_is_greater_ie_version($user->browser, 7)))
 		{
 			header('Content-Disposition: attachment; ' . header_filename(htmlspecialchars_decode($attachment['real_filename'])));
 			if (empty($user->browser) || (strpos(strtolower($user->browser), 'msie 6.0') !== false))