mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-11 22:08:54 +00:00
[ticket/16912] Add test
PHPBB3-16912
This commit is contained in:
parent
0537365cac
commit
a0ced790e2
2 changed files with 57 additions and 9 deletions
|
@ -1847,7 +1847,7 @@ class smtp_class
|
||||||
* https://github.com/symfony/polyfill-iconv/blob/fd324208ec59a39ebe776e6e9ec5540ad4f40aaa/Iconv.php#L355
|
* https://github.com/symfony/polyfill-iconv/blob/fd324208ec59a39ebe776e6e9ec5540ad4f40aaa/Iconv.php#L355
|
||||||
*
|
*
|
||||||
* @param string $str
|
* @param string $str
|
||||||
* @param string $eol End of line we are using (optional to be backwards compatible)
|
* @param string $eol Lines delimiter (optional to be backwards compatible)
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
|
@ -1856,20 +1856,20 @@ function mail_encode($str, $eol = "\r\n")
|
||||||
// Check if string contains ASCII only characters
|
// Check if string contains ASCII only characters
|
||||||
$is_ascii = strlen($str) === utf8_strlen($str);
|
$is_ascii = strlen($str) === utf8_strlen($str);
|
||||||
|
|
||||||
$scheme = $is_ascii ? "Q" : "B";
|
$scheme = $is_ascii ? 'Q' : 'B';
|
||||||
|
|
||||||
// Define start delimimter, end delimiter
|
// Define start delimimter, end delimiter
|
||||||
// Use the Quoted-Printable encoding for ASCII strings to avoid unnecessary encoding in Base64
|
// Use the Quoted-Printable encoding for ASCII strings to avoid unnecessary encoding in Base64
|
||||||
$start = $is_ascii ? "=?US-ASCII?$scheme?" : "=?UTF-8?$scheme?";
|
$start = $is_ascii ? '=?US-ASCII?' . $scheme . '?' : '=?UTF-8?' . $scheme . '?';
|
||||||
$end = "?=";
|
$end = '?=';
|
||||||
|
|
||||||
// Maximum encoded-word length is 75 as per RFC 2047 section 2.
|
// Maximum encoded-word length is 75 as per RFC 2047 section 2.
|
||||||
// $split_length *must* be a multiple of 4, but <= 75 - strlen($start . $delimiter . $end)!!!
|
// $split_length *must* be a multiple of 4, but <= 75 - strlen($start . $eol . $end)!!!
|
||||||
$split_length = 75 - strlen($start . $eol . $end);
|
$split_length = 75 - strlen($start . $eol . $end);
|
||||||
$split_length = $split_length - $split_length % 4;
|
$split_length = $split_length - $split_length % 4;
|
||||||
|
|
||||||
$line_length = \strlen($start) + \strlen($end);
|
$line_length = strlen($start) + strlen($end);
|
||||||
$line_offset = \strlen($start) + 1;
|
$line_offset = strlen($start) + 1;
|
||||||
$line_data = '';
|
$line_data = '';
|
||||||
|
|
||||||
$is_quoted_printable = 'Q' === $scheme;
|
$is_quoted_printable = 'Q' === $scheme;
|
||||||
|
@ -1885,7 +1885,7 @@ function mail_encode($str, $eol = "\r\n")
|
||||||
'/[=_\?\x20\x00-\x1F\x80-\xFF]/',
|
'/[=_\?\x20\x00-\x1F\x80-\xFF]/',
|
||||||
function ($matches)
|
function ($matches)
|
||||||
{
|
{
|
||||||
$hex = dechex(\ord($matches[0]));
|
$hex = dechex(ord($matches[0]));
|
||||||
$hex = strlen($hex) == 1 ? "0$hex" : $hex;
|
$hex = strlen($hex) == 1 ? "0$hex" : $hex;
|
||||||
return '=' . strtoupper($hex);
|
return '=' . strtoupper($hex);
|
||||||
},
|
},
|
||||||
|
@ -1905,7 +1905,7 @@ function mail_encode($str, $eol = "\r\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
$line_data .= $char;
|
$line_data .= $char;
|
||||||
$is_quoted_printable && $line_length += \strlen($char);
|
$is_quoted_printable && $line_length += strlen($char);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ('' !== $line_data)
|
if ('' !== $line_data)
|
||||||
|
|
48
tests/email/headers_encoding_test.php
Normal file
48
tests/email/headers_encoding_test.php
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* This file is part of the phpBB Forum Software package.
|
||||||
|
*
|
||||||
|
* @copyright (c) phpBB Limited <https://www.phpbb.com>
|
||||||
|
* @license GNU General Public License, version 2 (GPL-2.0)
|
||||||
|
*
|
||||||
|
* For full copyright and license information, please see
|
||||||
|
* the docs/CREDITS.txt file.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class phpbb_headers_encoding_test extends phpbb_test_case
|
||||||
|
{
|
||||||
|
protected function setUp(): void
|
||||||
|
{
|
||||||
|
global $phpbb_root_path, $phpEx;
|
||||||
|
|
||||||
|
if (!function_exists('mail_encode'))
|
||||||
|
{
|
||||||
|
include($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function headers_encoding_data()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
['test@yourdomain.com <phpBB fake test email>', 'Q', 'US-ASCII'],
|
||||||
|
['test@yourdomain.com <Несуществующий почтовый адрес phpBB>', 'B', 'UTF-8'],
|
||||||
|
["\xE3\x83\x86\xE3\x82\xB9\xE3\x83\x88\xE3\x83\x86\xE3\x82\xB9\xE3\x83\x88", 'B', 'UTF-8'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider headers_encoding_data
|
||||||
|
*/
|
||||||
|
public function test_headers_encoding($header, $scheme, $encoding)
|
||||||
|
{
|
||||||
|
$encoded_string = mail_encode($header);
|
||||||
|
$this->assertStringStartsWith("=?$encoding?$scheme?", $encoded_string);
|
||||||
|
$this->assertStringEndsWith('?=', $encoded_string);
|
||||||
|
|
||||||
|
// Result of iconv_mime_decode() on decoded header should be equal to initial header
|
||||||
|
$decoded_string = iconv_mime_decode($encoded_string, 0, $encoding);
|
||||||
|
$this->assertEquals(0, strcmp($header, $decoded_string));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue