Version in base suite: 1.6.18+dfsg-0+deb13u1 Version in overlay suite: 1.6.19+dfsg-0+deb13u1 Base version: roundcube_1.6.19+dfsg-0+deb13u1 Target version: roundcube_1.6.20+dfsg-0+deb13u1 Base file: /srv/ftp-master.debian.org/ftp/pool/main/r/roundcube/roundcube_1.6.19+dfsg-0+deb13u1.dsc Target file: /srv/ftp-master.debian.org/policy/pool/main/r/roundcube/roundcube_1.6.20+dfsg-0+deb13u1.dsc /srv/release.debian.org/tmp/50HIT1zye4/roundcube-1.6.20+dfsg/tests/src/logo.jpg |binary roundcube-1.6.20+dfsg/CHANGELOG.md | 23 + roundcube-1.6.20+dfsg/debian/changelog | 38 ++ roundcube-1.6.20+dfsg/debian/patches/Avoid-dependency-on-new-package-mlocati-ip-lib.patch | 22 - roundcube-1.6.20+dfsg/debian/patches/Fix-FTBFS-with-phpunit-11.patch | 148 +++++----- roundcube-1.6.20+dfsg/index.php | 10 roundcube-1.6.20+dfsg/plugins/markasjunk/markasjunk.php | 2 roundcube-1.6.20+dfsg/plugins/password/drivers/directadmin.php | 2 roundcube-1.6.20+dfsg/plugins/password/drivers/modoboa.php | 29 + roundcube-1.6.20+dfsg/plugins/password/password.php | 2 roundcube-1.6.20+dfsg/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php | 5 roundcube-1.6.20+dfsg/program/actions/contacts/upload_photo.php | 2 roundcube-1.6.20+dfsg/program/actions/mail/compose.php | 6 roundcube-1.6.20+dfsg/program/actions/mail/headers.php | 3 roundcube-1.6.20+dfsg/program/actions/mail/viewsource.php | 3 roundcube-1.6.20+dfsg/program/actions/utils/modcss.php | 23 + roundcube-1.6.20+dfsg/program/include/rcmail.php | 25 + roundcube-1.6.20+dfsg/program/include/rcmail_attachment_handler.php | 3 roundcube-1.6.20+dfsg/program/include/rcmail_sendmail.php | 14 roundcube-1.6.20+dfsg/program/lib/Roundcube/rcube_image.php | 5 roundcube-1.6.20+dfsg/program/lib/Roundcube/rcube_imap_generic.php | 4 roundcube-1.6.20+dfsg/program/lib/Roundcube/rcube_mime.php | 3 roundcube-1.6.20+dfsg/program/lib/Roundcube/rcube_session.php | 9 roundcube-1.6.20+dfsg/program/lib/Roundcube/rcube_user.php | 4 roundcube-1.6.20+dfsg/program/lib/Roundcube/rcube_utils.php | 10 roundcube-1.6.20+dfsg/program/lib/Roundcube/rcube_washtml.php | 73 ++++ roundcube-1.6.20+dfsg/public_html/plugins/markasjunk/markasjunk.php | 2 roundcube-1.6.20+dfsg/public_html/plugins/password/drivers/directadmin.php | 2 roundcube-1.6.20+dfsg/public_html/plugins/password/drivers/modoboa.php | 29 + roundcube-1.6.20+dfsg/public_html/plugins/password/password.php | 2 roundcube-1.6.20+dfsg/public_html/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php | 5 roundcube-1.6.20+dfsg/tests/Framework/Mime.php | 15 + roundcube-1.6.20+dfsg/tests/Framework/Utils.php | 22 + roundcube-1.6.20+dfsg/tests/Framework/Washtml.php | 49 +++ roundcube-1.6.20+dfsg/tests/Rcmail/Sendmail.php | 20 + 35 files changed, 462 insertions(+), 152 deletions(-) dpkg-source: warning: cannot verify inline signature for /srv/release.debian.org/tmp/tmpnbjkaszy/roundcube_1.6.19+dfsg-0+deb13u1.dsc: no acceptable signature found dpkg-source: warning: cannot verify inline signature for /srv/release.debian.org/tmp/tmpnbjkaszy/roundcube_1.6.20+dfsg-0+deb13u1.dsc: no acceptable signature found diff -Nru roundcube-1.6.19+dfsg/CHANGELOG.md roundcube-1.6.20+dfsg/CHANGELOG.md --- roundcube-1.6.19+dfsg/CHANGELOG.md 2026-09-06 08:27:09.000000000 +0000 +++ roundcube-1.6.20+dfsg/CHANGELOG.md 2026-10-19 06:49:43.000000000 +0000 @@ -2,6 +2,29 @@ ## Unreleased +- Security: Fix IMAP command injection via CRLF in `_uid` parameter of mail/headers and mail/viewsource action +- Security: Fix bug where an alias login wasn't qualified by IMAP host +- Security: Add a size limit to the CSS proxy content processing +- Security: Fix SSRF filter (is_local_url()) bypass via NAT64 64:ff9b::/96 +- Security: Fix remote content blocking bypass via SVG SMIL `by` attribute +- Security: Fix remote content blocking bypass via CSS escapes in FuncIRI attributes (again) +- Security: Fix passing potentally unsafe attachment content into ImageMagick on image resize +- Security: Fix mail header injection via the From display-name in the Bounce (resend) action +- Security: Fix mail header injection via References/In-Reply-To/Message-ID/From parameters +- Security: Fix object injection primitive in rcube_session::unserialize() via "!"-prefixed session keys +- Security: Fix ImageMagick resource limits bypass by GD fallback during thumbnail generation +- Security: Fix CSS scoping bypass in HTML messages using at-rules +- Security: Fix bug where deprecated action aliases bypassed `disabled_actions` setting +- Security: Fix IMAP command injection via CRLF in `_flag` parameter of mail/mark action +- Security: Fix CSRF validation bypass in the mark-as-junk action +- Security: Fix XSS issue in handling of password driver error responses +- Security: Fix mail header injection via subject of a message forwarded as attachment +- Security: Fix mail header injection via media type in an inline image data URI +- Security: Fix bug where Password Modoboa driver could change password for another account +- Security: Fix unsafe use of a login name in SquirrelMail import file path + +## Release 1.6.19 + - Fix PHP Warning: Undefined variable $tmp_command in .../plugins/markasjunk/drivers/cmd_learn.php (#10294) - Security: Fix CSS declaration smuggling via un-encoded ampersand emission - Security: Fix CSS property injection via body `background` attribute diff -Nru roundcube-1.6.19+dfsg/debian/changelog roundcube-1.6.20+dfsg/debian/changelog --- roundcube-1.6.19+dfsg/debian/changelog 2026-09-06 11:22:41.000000000 +0000 +++ roundcube-1.6.20+dfsg/debian/changelog 2026-10-20 05:00:29.000000000 +0000 @@ -1,3 +1,41 @@ +roundcube (1.6.20+dfsg-0+deb13u1) trixie-security; urgency=high + + * New upstream security and bugfix release (closes: #1151279). + + Fix CVE-2026-113386: IMAP command injection via CRLF in `_uid` parameter + of mail/headers and mail/viewsource action. + + Fix bug where an alias login wasn't qualified by IMAP host. + + Add a size limit to the CSS proxy content processing. + + Fix SSRF filter (`is_local_url()`) bypass via NAT64 64:ff9b::/96. + + Fix remote content blocking bypass via SVG SMIL `by` attribute. + + Fix remote content blocking bypass via CSS escapes in FuncIRI attributes + (again). + + Fix passing potentially unsafe attachment content into ImageMagick on + image resize. + + Fix mail header injection via the From display-name in the Bounce (resend) + action. + + Fix mail header injection via References/In-Reply-To/Message-ID/From + parameters. + + Fix object injection primitive in rcube_session::unserialize() via + “!”-prefixed session keys. + + Fix ImageMagick resource limits bypass by GD fallback during thumbnail + generation. + + Fix CSS scoping bypass in HTML messages using at-rules. + + Fix bug where deprecated action aliases bypassed `disabled_actions` + setting. + + Fix IMAP command injection via CRLF in `_flag` parameter of mail/mark + action. + + Fix CSRF validation bypass in the mark-as-junk action. + + Fix XSS issue in handling of password driver error responses. + + Fix mail header injection via subject of a message forwarded as + attachment. + + Fix mail header injection via media type in an inline image data URI. + + Fix bug where Password Modoboa driver could change password for another + account. + + Fix unsafe use of a login name in SquirrelMail import file path. + * Refresh d/patches. + + -- Guilhem Moulin Tue, 20 Oct 2026 07:00:29 +0200 + roundcube (1.6.19+dfsg-0+deb13u1) trixie-security; urgency=high * New upstream security and bugfix release (closes: #1146838). diff -Nru roundcube-1.6.19+dfsg/debian/patches/Avoid-dependency-on-new-package-mlocati-ip-lib.patch roundcube-1.6.20+dfsg/debian/patches/Avoid-dependency-on-new-package-mlocati-ip-lib.patch --- roundcube-1.6.19+dfsg/debian/patches/Avoid-dependency-on-new-package-mlocati-ip-lib.patch 2026-09-06 11:22:41.000000000 +0000 +++ roundcube-1.6.20+dfsg/debian/patches/Avoid-dependency-on-new-package-mlocati-ip-lib.patch 2026-10-20 05:00:29.000000000 +0000 @@ -11,9 +11,9 @@ Forwarded: not-needed --- composer.json-dist | 3 +- - program/lib/Roundcube/rcube_utils.php | 163 +++++++++++++++++++++++++++++----- - tests/Framework/Utils.php | 85 ++++++++++++++++++ - 3 files changed, 225 insertions(+), 26 deletions(-) + program/lib/Roundcube/rcube_utils.php | 169 ++++++++++++++++++++++++++++------ + tests/Framework/Utils.php | 85 +++++++++++++++++ + 3 files changed, 228 insertions(+), 29 deletions(-) diff --git a/composer.json-dist b/composer.json-dist index 1807004..ca3de26 100644 @@ -30,7 +30,7 @@ "require-dev": { "phpunit/phpunit": "^9" diff --git a/program/lib/Roundcube/rcube_utils.php b/program/lib/Roundcube/rcube_utils.php -index b10103e..2c1aff8 100644 +index 270a14f..94f0fc4 100644 --- a/program/lib/Roundcube/rcube_utils.php +++ b/program/lib/Roundcube/rcube_utils.php @@ -1,8 +1,5 @@ @@ -171,7 +171,7 @@ $host = trim($host, '[].'); if (preg_match('/([0-9a-f.-]+)\.(nip|sslip)\.io$/i', $host, $matches)) { -@@ -452,26 +554,39 @@ class rcube_utils +@@ -452,29 +554,42 @@ class rcube_utils } } @@ -192,9 +192,12 @@ - '169.254.0.0/16', // link-local / cloud metadata - '100.64.0.0/10', // RFC6598: Shared Address Space (carrier-grade NAT) - '::1/128', +- '::/128', - 'fc00::/7', - 'fe80::/10', // IPv6 link-local - '::ffff:0:0/96', // RFC5156 +- '64:ff9b::/96', // RFC 6052 NAT64 (maps IPv4 incl. private ranges into IPv6) +- '64:ff9b:1::/48' // (RFC 8215 local-use NAT64) + if (is_string($address = \rcube_utils::inet_pton2($host))) { + $nets = [ + ['0.0.0.0', '0.0.0.0'], @@ -213,8 +216,11 @@ + } + } + $nets[] = ['::1', '::1']; ++ $nets[] = ['::', '::']; + $nets[] = ['fc00::', 'fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff']; + $nets[] = ['fe80::', 'febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff']; // IPv6 link-local ++ $nets[] = ['64:ff9b::', '64:ff9b::ffff:ffff']; // RFC 6052 NAT64 (maps IPv4 incl. private ranges into IPv6) ++ $nets[] = ['64:ff9b:1::', '64:ff9b:1:ffff:ffff:ffff:ffff:ffff']; // (RFC 8215 local-use NAT64) + } - foreach ($nets as $net) { @@ -228,10 +234,10 @@ } } diff --git a/tests/Framework/Utils.php b/tests/Framework/Utils.php -index 98f53d0..757c1c4 100644 +index 4325b0b..5769772 100644 --- a/tests/Framework/Utils.php +++ b/tests/Framework/Utils.php -@@ -571,6 +571,86 @@ class Framework_Utils extends TestCase +@@ -588,6 +588,86 @@ class Framework_Utils extends TestCase } } @@ -318,7 +324,7 @@ /** * Test is_local_url() * -@@ -590,12 +670,17 @@ class Framework_Utils extends TestCase +@@ -607,12 +687,17 @@ class Framework_Utils extends TestCase return [ // Local hosts ['https://127.0.0.1', true], diff -Nru roundcube-1.6.19+dfsg/debian/patches/Fix-FTBFS-with-phpunit-11.patch roundcube-1.6.20+dfsg/debian/patches/Fix-FTBFS-with-phpunit-11.patch --- roundcube-1.6.19+dfsg/debian/patches/Fix-FTBFS-with-phpunit-11.patch 2026-09-06 11:22:41.000000000 +0000 +++ roundcube-1.6.20+dfsg/debian/patches/Fix-FTBFS-with-phpunit-11.patch 2026-10-20 05:00:29.000000000 +0000 @@ -8765,7 +8765,7 @@ } } diff --git a/tests/Framework/Mime.php b/tests/Framework/Mime.php -index abe9939..81d42f0 100644 +index b4266fd..602ffa9 100644 --- a/tests/Framework/Mime.php +++ b/tests/Framework/Mime.php @@ -1,11 +1,13 @@ @@ -8803,7 +8803,7 @@ $this->assertEquals($results[$idx], $res, "Decode address groups (#$idx)"); } -@@ -174,7 +176,7 @@ class Framework_Mime extends PHPUnit\Framework\TestCase +@@ -189,7 +191,7 @@ class Framework_Mime extends PHPUnit\Framework\TestCase ]; foreach ($test as $idx => $item) { @@ -8812,7 +8812,7 @@ $res = quoted_printable_encode($res); $this->assertEquals($item['out'], $res, "Header decoding for: " . $idx); -@@ -186,7 +188,7 @@ class Framework_Mime extends PHPUnit\Framework\TestCase +@@ -201,7 +203,7 @@ class Framework_Mime extends PHPUnit\Framework\TestCase */ function test_parse_headers() { @@ -8821,7 +8821,7 @@ $headers = "Subject: Test\r\n" -@@ -197,7 +199,7 @@ class Framework_Mime extends PHPUnit\Framework\TestCase +@@ -212,7 +214,7 @@ class Framework_Mime extends PHPUnit\Framework\TestCase 'to' => 'test@test1.com test@test2.com' ]; @@ -8830,7 +8830,7 @@ } /** -@@ -208,7 +210,7 @@ class Framework_Mime extends PHPUnit\Framework\TestCase +@@ -223,7 +225,7 @@ class Framework_Mime extends PHPUnit\Framework\TestCase $raw = file_get_contents(TESTS_DIR . 'src/format-flowed-unfolded.txt'); $flowed = file_get_contents(TESTS_DIR . 'src/format-flowed.txt'); @@ -8839,7 +8839,7 @@ } /** -@@ -219,7 +221,7 @@ class Framework_Mime extends PHPUnit\Framework\TestCase +@@ -234,7 +236,7 @@ class Framework_Mime extends PHPUnit\Framework\TestCase $flowed = file_get_contents(TESTS_DIR . 'src/format-flowed.txt'); $unfolded = file_get_contents(TESTS_DIR . 'src/format-flowed-unfolded.txt'); @@ -8848,7 +8848,7 @@ } /** -@@ -234,7 +236,7 @@ class Framework_Mime extends PHPUnit\Framework\TestCase +@@ -249,7 +251,7 @@ class Framework_Mime extends PHPUnit\Framework\TestCase ."> \r\n" ."Sed ut perspiciatis unde omnis iste natus error sit voluptatem"; @@ -8857,7 +8857,7 @@ } /** -@@ -248,7 +250,7 @@ class Framework_Mime extends PHPUnit\Framework\TestCase +@@ -263,7 +265,7 @@ class Framework_Mime extends PHPUnit\Framework\TestCase ."しているのを見ました。"; $unfolded = "そしてジョバンニはすぐうしろの天気輪の柱がいつかぼんやりした三角標の形になって、しばらく蛍のように、ぺかぺか消えたりともったりしているのを見ました。"; @@ -8866,7 +8866,7 @@ } /** -@@ -306,8 +308,8 @@ class Framework_Mime extends PHPUnit\Framework\TestCase +@@ -321,8 +323,8 @@ class Framework_Mime extends PHPUnit\Framework\TestCase "this-is-just-some-blabla-to-make-this-more-than-seventy-five-characters-in-a-row\n-- this line should\nbe wrapped", ], [ @@ -8877,7 +8877,7 @@ ], ]; -@@ -322,9 +324,9 @@ class Framework_Mime extends PHPUnit\Framework\TestCase +@@ -337,9 +339,9 @@ class Framework_Mime extends PHPUnit\Framework\TestCase function test_parse_message() { $file = file_get_contents(__DIR__ . '/../src/html.msg'); @@ -8889,7 +8889,7 @@ $this->assertSame('multipart/alternative', $result->mimetype); $this->assertSame('1.0', $result->headers['mime-version']); $this->assertSame('=_68eeaf4ab95b5312965e45c33362338e', $result->ctype_parameters['boundary']); -@@ -355,9 +357,9 @@ class Framework_Mime extends PHPUnit\Framework\TestCase +@@ -370,9 +372,9 @@ class Framework_Mime extends PHPUnit\Framework\TestCase function test_file_content_type() { $file = INSTALL_PATH . 'program/resources/blocked.gif'; @@ -8901,7 +8901,7 @@ } /** -@@ -365,10 +367,10 @@ class Framework_Mime extends PHPUnit\Framework\TestCase +@@ -380,10 +382,10 @@ class Framework_Mime extends PHPUnit\Framework\TestCase */ function test_get_mime_extensions() { @@ -8916,7 +8916,7 @@ } /** -@@ -377,7 +379,7 @@ class Framework_Mime extends PHPUnit\Framework\TestCase +@@ -392,7 +394,7 @@ class Framework_Mime extends PHPUnit\Framework\TestCase function test_image_content_type() { $file = file_get_contents(INSTALL_PATH . 'program/resources/blocked.gif'); @@ -8925,7 +8925,7 @@ } /** -@@ -385,9 +387,9 @@ class Framework_Mime extends PHPUnit\Framework\TestCase +@@ -400,9 +402,9 @@ class Framework_Mime extends PHPUnit\Framework\TestCase */ function test_fix_mimetype() { @@ -10052,7 +10052,7 @@ $idents = $user->list_identities(); diff --git a/tests/Framework/Utils.php b/tests/Framework/Utils.php -index 26cf452..98f53d0 100644 +index 08d0880..4325b0b 100644 --- a/tests/Framework/Utils.php +++ b/tests/Framework/Utils.php @@ -1,11 +1,15 @@ @@ -10283,7 +10283,7 @@ $this->assertSame("#rcmbody { color: red; }", $mod); $style = 'body { background:url(alert('URL!')); }'; -@@ -343,7 +352,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -360,7 +369,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase :root * { color: red; } :root > * { top: 0; } '; @@ -10292,7 +10292,7 @@ $this->assertStringContainsString('#rc .testone', $mod); $this->assertStringContainsString('#rc .testthree.testfour', $mod); -@@ -361,24 +370,24 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -378,24 +387,24 @@ class Framework_Utils extends PHPUnit\Framework\TestCase function test_xss_entity_decode() { @@ -10322,7 +10322,7 @@ { return [ [ -@@ -453,9 +462,10 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -470,9 +479,10 @@ class Framework_Utils extends PHPUnit\Framework\TestCase * * @dataProvider data_parse_css_block */ @@ -10334,7 +10334,7 @@ } /** -@@ -470,7 +480,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -487,7 +497,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase ]; foreach ($data as $text => $res) { @@ -10343,7 +10343,7 @@ $this->assertSame($res, $result); } } -@@ -483,7 +493,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -500,7 +510,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase $data = ['', 'a,b,c', 'a', ',', ',a']; foreach ($data as $text) { @@ -10352,7 +10352,7 @@ $this->assertSame(explode(',', $text), $result); } } -@@ -498,7 +508,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -515,7 +525,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase ]; foreach ($input as $idx => $value) { @@ -10361,7 +10361,7 @@ } $input = [ -@@ -506,7 +516,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -523,7 +533,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase ]; foreach ($input as $idx => $value) { @@ -10370,7 +10370,7 @@ } } -@@ -516,13 +526,13 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -533,13 +543,13 @@ class Framework_Utils extends PHPUnit\Framework\TestCase function test_get_input_string() { $_GET = []; @@ -10387,7 +10387,7 @@ } /** -@@ -530,18 +540,18 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -547,18 +557,18 @@ class Framework_Utils extends PHPUnit\Framework\TestCase */ function test_is_simple_string() { @@ -10418,7 +10418,7 @@ } /** -@@ -556,7 +566,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -573,7 +583,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase ]; foreach ($test as $v) { @@ -10427,7 +10427,7 @@ $this->assertSame($v[2], $result); } } -@@ -646,7 +656,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -668,7 +678,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase ]; foreach ($test as $datetime => $ts) { @@ -10436,7 +10436,7 @@ $this->assertSame($ts, $result, "Error parsing date: $datetime"); } } -@@ -673,7 +683,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -695,7 +705,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase ]; foreach ($test as $datetime => $ts) { @@ -10445,7 +10445,7 @@ $this->assertSame($ts, $result ? $result->format('Y-m-d') : false, "Error parsing date: $datetime"); } -@@ -683,7 +693,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -705,7 +715,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase ]; foreach ($test as $datetime => $ts) { @@ -10454,7 +10454,7 @@ $this->assertSame($ts, $result ? $result->format('Y-m-d H:i:s') : false, "Error parsing date: $datetime"); } -@@ -692,7 +702,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -714,7 +724,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase ]; foreach ($test as $datetime => $ts) { @@ -10463,7 +10463,7 @@ $this->assertSame($ts, $result ? $result->format('Y-m-d H:i:s O') : false, "Error parsing date: $datetime"); } } -@@ -702,17 +712,17 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -724,17 +734,17 @@ class Framework_Utils extends PHPUnit\Framework\TestCase */ function test_anytodatetime_timezone() { @@ -10484,7 +10484,7 @@ if ($result) $result->setTimezone($tz); // move to target timezone for comparison $this->assertSame($ts, $result ? $result->format('Y-m-d H:i') : false, "Error parsing date: $datetime"); } -@@ -731,7 +741,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -753,7 +763,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase ]; foreach ($test as $data) { @@ -10493,7 +10493,7 @@ $this->assertSame($data[2], $result, "Error formatting date: " . $data[0]); } } -@@ -750,7 +760,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -772,7 +782,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase ]; foreach ($test as $input => $output) { @@ -10502,7 +10502,7 @@ $this->assertSame($output, $result); } } -@@ -775,7 +785,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -797,7 +807,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase ]; foreach ($test as $input => $output) { @@ -10511,7 +10511,7 @@ $this->assertSame($output, $result, "Error normalizing '$input'"); } } -@@ -798,7 +808,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -820,7 +830,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase ]; foreach ($test as $idx => $params) { @@ -10520,7 +10520,7 @@ $this->assertSame($params[2], $result, "words_match() at index $idx"); } } -@@ -824,7 +834,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -846,7 +856,7 @@ class Framework_Utils extends PHPUnit\Framework\TestCase } foreach ($test as $input => $output) { @@ -10529,7 +10529,7 @@ $this->assertSame($output, $result); } } -@@ -834,17 +844,17 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -856,17 +866,17 @@ class Framework_Utils extends PHPUnit\Framework\TestCase */ function test_random_bytes() { @@ -10553,7 +10553,7 @@ { /* -@@ -881,9 +891,10 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -903,9 +913,10 @@ class Framework_Utils extends PHPUnit\Framework\TestCase * @param string $encoded Encoded email address * @dataProvider data_idn_convert */ @@ -10565,7 +10565,7 @@ } /** -@@ -893,9 +904,10 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -915,9 +926,10 @@ class Framework_Utils extends PHPUnit\Framework\TestCase * @param string $encoded Encoded email address * @dataProvider data_idn_convert */ @@ -10577,7 +10577,7 @@ } /** -@@ -903,14 +915,14 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -925,14 +937,14 @@ class Framework_Utils extends PHPUnit\Framework\TestCase */ function test_idn_to_ascii_special() { @@ -10595,7 +10595,7 @@ { return [ ['%z', 'hostname', 'hostname'], -@@ -925,15 +937,16 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -947,15 +959,16 @@ class Framework_Utils extends PHPUnit\Framework\TestCase * * @dataProvider data_parse_host */ @@ -10614,7 +10614,7 @@ { return [ [['hostname', null, null], ['hostname', null, null]], -@@ -956,15 +969,16 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -978,15 +991,16 @@ class Framework_Utils extends PHPUnit\Framework\TestCase * * @dataProvider data_parse_host_uri */ @@ -10633,7 +10633,7 @@ return [ ['both', 'Fwd: Re: Test subject both', 'Test subject both'], ['both', 'Re: Fwd: Test subject both', 'Test subject both'], -@@ -982,8 +996,9 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -1004,8 +1018,9 @@ class Framework_Utils extends PHPUnit\Framework\TestCase * * @dataProvider data_remove_subject_prefix */ @@ -10644,7 +10644,7 @@ } /** -@@ -991,13 +1006,13 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -1013,13 +1028,13 @@ class Framework_Utils extends PHPUnit\Framework\TestCase */ function test_server_name() { @@ -10661,7 +10661,7 @@ } /** -@@ -1007,31 +1022,31 @@ class Framework_Utils extends PHPUnit\Framework\TestCase +@@ -1029,31 +1044,31 @@ class Framework_Utils extends PHPUnit\Framework\TestCase { $_SERVER['test'] = 'test.com'; @@ -10860,7 +10860,7 @@ $this->assertSame($result, "BEGIN:VCARD\r\nVERSION:3.0\r\nFN:\r\nN:;;;;\r\nEND:VCARD"); diff --git a/tests/Framework/Washtml.php b/tests/Framework/Washtml.php -index 03ab2db..a61f7da 100644 +index 794a077..85cbe9b 100644 --- a/tests/Framework/Washtml.php +++ b/tests/Framework/Washtml.php @@ -1,11 +1,14 @@ @@ -11061,7 +11061,7 @@ { $svg1 = ""; -@@ -573,9 +576,10 @@ class Framework_Washtml extends PHPUnit\Framework\TestCase +@@ -622,9 +625,10 @@ class Framework_Washtml extends PHPUnit\Framework\TestCase * * @dataProvider data_wash_svg_tests */ @@ -11073,7 +11073,7 @@ $washed = $washer->wash($input); $this->assertSame($expected, $this->cleanupResult($washed), "SVG content"); -@@ -584,7 +588,7 @@ class Framework_Washtml extends PHPUnit\Framework\TestCase +@@ -633,7 +637,7 @@ class Framework_Washtml extends PHPUnit\Framework\TestCase /** * Test cases for various XSS issues */ @@ -11082,7 +11082,7 @@ { return [ [ -@@ -660,9 +664,10 @@ class Framework_Washtml extends PHPUnit\Framework\TestCase +@@ -709,9 +713,10 @@ class Framework_Washtml extends PHPUnit\Framework\TestCase * * @dataProvider data_wash_xss_tests */ @@ -11094,7 +11094,7 @@ $washed = $washer->wash($input); $this->assertSame($expected, $this->cleanupResult($washed), "XSS issues"); -@@ -676,7 +681,7 @@ class Framework_Washtml extends PHPUnit\Framework\TestCase +@@ -725,7 +730,7 @@ class Framework_Washtml extends PHPUnit\Framework\TestCase $html = ""; $exp = ""; @@ -11103,7 +11103,7 @@ $washed = $washer->wash($html); $this->assertTrue(strpos($washed, $exp) !== false, "Position:fixed (#5264)"); -@@ -720,7 +725,7 @@ class Framework_Washtml extends PHPUnit\Framework\TestCase +@@ -769,7 +774,7 @@ class Framework_Washtml extends PHPUnit\Framework\TestCase I_D = \frac{1}{2} k_n \frac{W}{L} (V_{GS}-V_t)^2 '; @@ -11112,7 +11112,7 @@ $washed = $washer->wash($mathml); // remove whitespace between tags -@@ -737,7 +742,7 @@ class Framework_Washtml extends PHPUnit\Framework\TestCase +@@ -786,7 +791,7 @@ class Framework_Washtml extends PHPUnit\Framework\TestCase { $html = ""; @@ -11121,7 +11121,7 @@ $washed = $washer->wash($html); $this->assertTrue($washer->extlinks); -@@ -745,7 +750,7 @@ class Framework_Washtml extends PHPUnit\Framework\TestCase +@@ -794,7 +799,7 @@ class Framework_Washtml extends PHPUnit\Framework\TestCase $html = "