| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- <?php
- declare(strict_types=1);
- /*
- * This file is part of the league/commonmark package.
- *
- * (c) Colin O'Dell <colinodell@gmail.com>
- *
- * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js)
- * - (c) John MacFarlane
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace League\CommonMark\Tests\Unit\Util;
- use League\CommonMark\Exception\UnexpectedEncodingException;
- use League\CommonMark\Util\UrlEncoder;
- use PHPUnit\Framework\TestCase;
- final class UrlEncoderTest extends TestCase
- {
- /**
- * @dataProvider unescapeAndEncodeTestProvider
- */
- public function testUnescapeAndEncode(string $input, string $expected): void
- {
- $this->assertEquals($expected, UrlEncoder::unescapeAndEncode($input));
- }
- /**
- * @return iterable<array<string>>
- */
- public function unescapeAndEncodeTestProvider(): iterable
- {
- return [
- ['(foo)', '(foo)'],
- ['/my uri', '/my%20uri'],
- ['`', '%60'],
- ['~', '~'],
- ['!', '!'],
- ['@', '@'],
- ['#', '#'],
- ['$', '$'],
- ['%', '%25'],
- ['^', '%5E'],
- ['&', '&'],
- ['*', '*'],
- ['(', '('],
- [')', ')'],
- ['-', '-'],
- ['_', '_'],
- ['=', '='],
- ['+', '+'],
- ['{', '%7B'],
- ['}', '%7D'],
- ['[', '%5B'],
- [']', '%5D'],
- ['\\', '%5C'],
- ['|', '%7C'],
- [';', ';'],
- ['\'', '\''],
- [':', ':'],
- ['"', '%22'],
- [',', ','],
- ['.', '.'],
- ['/', '/'],
- ['<', '%3C'],
- ['>', '%3E'],
- ['?', '?'],
- ['%21', '%21'],
- ['%23', '%23'],
- ['%24', '%24'],
- ['%26', '%26'],
- ['%27', '%27'],
- ['%2A', '%2A'],
- ['%2B', '%2B'],
- ['%2C', '%2C'],
- ['%2D', '%2D'],
- ['%2E', '%2E'],
- ['%2F', '%2F'],
- ['%3A', '%3A'],
- ['%3B', '%3B'],
- ['%3D', '%3D'],
- ['%3F', '%3F'],
- ['%40', '%40'],
- ['%5F', '%5F'],
- ['%7E', '%7E'],
- ['%ED', '%ED'],
- ['java%0ascript:alert("XSS")', 'java%0ascript:alert(%22XSS%22)'],
- ['java%0Ascript:alert("XSS")', 'java%0Ascript:alert(%22XSS%22)'],
- ["java\nscript:alert('XSS')", "java%0Ascript:alert('XSS')"],
- ['javascript&colon;alert%28'XSS'%29', 'javascript&colon;alert%28'XSS'%29'],
- ['https://en.wikipedia.org/wiki/Markdown#CommonMark', 'https://en.wikipedia.org/wiki/Markdown#CommonMark'],
- ['https://img.shields.io/badge/help-%23hoaproject-ff0066.svg', 'https://img.shields.io/badge/help-%23hoaproject-ff0066.svg'],
- ['http://example.com/a%62%63%2fd%3Fe', 'http://example.com/a%62%63%2fd%3Fe'],
- ['http://ko.wikipedia.org/wiki/위키백과:대문', 'http://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EB%8C%80%EB%AC%B8'],
- ['http://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EB%8C%80%EB%AC%B8', 'http://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EB%8C%80%EB%AC%B8'],
- ['http://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EB%8C%80%EB%AC%B8', 'http://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EB%8C%80%EB%AC%B8'],
- ['http://www.inpec.gov.co/portal/page/portal/Inpec/Institucion/Estad%EDsticas/Estadisticas/Informes%20y%20Boletines%20Estad%EDsticos/1%20INFORME%20ENERO%202017.pdf', 'http://www.inpec.gov.co/portal/page/portal/Inpec/Institucion/Estad%EDsticas/Estadisticas/Informes%20y%20Boletines%20Estad%EDsticos/1%20INFORME%20ENERO%202017.pdf'],
- ['https://www.example.com/stocks-rise-50%-today.html', 'https://www.example.com/stocks-rise-50%25-today.html'],
- ['data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='],
- ['data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==', 'data:image/png;base64,%20iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='],
- ];
- }
- public function testInvalidUnicodeProducesAnException(): void
- {
- $this->expectException(UnexpectedEncodingException::class);
- UrlEncoder::unescapeAndEncode(\hex2bin('A5A5A5'));
- }
- }
|