mirror of
https://github.com/ezyang/htmlpurifier.git
synced 2025-07-31 19:30:21 +02:00
[2.1.0] Implement MakeAbsolute URI filter
- Move some directives with complex dependencies to URIDefinition - Fix a missing extends - Add hierarchical information to URI schemes - Fix bug in URIHarness. git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@1346 48356398-32a2-884e-a903-53898d9a118a
This commit is contained in:
@@ -31,4 +31,29 @@ class HTMLPurifier_URIDefinitionTest extends HTMLPurifier_URIHarness
|
||||
$this->assertFalse($def->filter($uri, $this->config, $this->context));
|
||||
}
|
||||
|
||||
function test_setupMemberVariables_collisionPrecedenceIsHostBaseScheme() {
|
||||
$this->config->set('URI', 'Host', $host = 'example.com');
|
||||
$this->config->set('URI', 'Base', $base = 'http://sub.example.com/foo/bar.html');
|
||||
$this->config->set('URI', 'DefaultScheme', 'ftp');
|
||||
$def = new HTMLPurifier_URIDefinition();
|
||||
$def->setupMemberVariables($this->config);
|
||||
$this->assertIdentical($def->host, $host);
|
||||
$this->assertIdentical($def->base, $this->createURI($base));
|
||||
$this->assertIdentical($def->defaultScheme, 'http'); // not ftp!
|
||||
}
|
||||
|
||||
function test_setupMemberVariables_onlyScheme() {
|
||||
$this->config->set('URI', 'DefaultScheme', 'ftp');
|
||||
$def = new HTMLPurifier_URIDefinition();
|
||||
$def->setupMemberVariables($this->config);
|
||||
$this->assertIdentical($def->defaultScheme, 'ftp');
|
||||
}
|
||||
|
||||
function test_setupMemberVariables_onlyBase() {
|
||||
$this->config->set('URI', 'Base', 'http://sub.example.com/foo/bar.html');
|
||||
$def = new HTMLPurifier_URIDefinition();
|
||||
$def->setupMemberVariables($this->config);
|
||||
$this->assertIdentical($def->host, 'sub.example.com');
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -9,6 +9,7 @@ class HTMLPurifier_URIFilter_DisableExternalResourcesTest extends
|
||||
|
||||
function setUp() {
|
||||
parent::setUp();
|
||||
$this->filter = new HTMLPurifier_URIFilter_DisableExternalResources();
|
||||
$var = true;
|
||||
$this->context->register('EmbeddedURI', $var);
|
||||
}
|
||||
|
122
tests/HTMLPurifier/URIFilter/MakeAbsoluteTest.php
Normal file
122
tests/HTMLPurifier/URIFilter/MakeAbsoluteTest.php
Normal file
@@ -0,0 +1,122 @@
|
||||
<?php
|
||||
|
||||
require_once 'HTMLPurifier/URIFilter/MakeAbsolute.php';
|
||||
require_once 'HTMLPurifier/URIFilterHarness.php';
|
||||
|
||||
class HTMLPurifier_URIFilter_MakeAbsoluteTest extends HTMLPurifier_URIFilterHarness
|
||||
{
|
||||
|
||||
function setUp() {
|
||||
parent::setUp();
|
||||
$this->filter = new HTMLPurifier_URIFilter_MakeAbsolute();
|
||||
$this->setBase();
|
||||
}
|
||||
|
||||
function setBase($base = 'http://example.com/foo/bar.html?q=s#frag') {
|
||||
$this->config->set('URI', 'Base', $base);
|
||||
}
|
||||
|
||||
// corresponding to RFC 2396
|
||||
|
||||
function testPreserveAbsolute() {
|
||||
$this->assertFiltering('http://example.com/foo.html');
|
||||
}
|
||||
|
||||
function testFilterBlank() {
|
||||
$this->assertFiltering('', 'http://example.com/foo/bar.html?q=s');
|
||||
}
|
||||
|
||||
function testFilterEmptyPath() {
|
||||
$this->assertFiltering('?q=s#frag', 'http://example.com/foo/bar.html?q=s#frag');
|
||||
}
|
||||
|
||||
function testPreserveAltScheme() {
|
||||
$this->assertFiltering('mailto:bob@example.com');
|
||||
}
|
||||
|
||||
function testFilterIgnoreHTTPSpecialCase() {
|
||||
$this->assertFiltering('http:/', 'http://example.com/');
|
||||
}
|
||||
|
||||
function testFilterAbsolutePath() {
|
||||
$this->assertFiltering('/foo.txt', 'http://example.com/foo.txt');
|
||||
}
|
||||
|
||||
function testFilterRelativePath() {
|
||||
$this->assertFiltering('baz.txt', 'http://example.com/foo/baz.txt');
|
||||
}
|
||||
|
||||
function testFilterRelativePathWithInternalDot() {
|
||||
$this->assertFiltering('./baz.txt', 'http://example.com/foo/baz.txt');
|
||||
}
|
||||
|
||||
function testFilterRelativePathWithEndingDot() {
|
||||
$this->assertFiltering('baz/.', 'http://example.com/foo/baz/');
|
||||
}
|
||||
|
||||
function testFilterRelativePathDot() {
|
||||
$this->assertFiltering('.', 'http://example.com/foo/');
|
||||
}
|
||||
|
||||
function testFilterRelativePathWithInternalDotDot() {
|
||||
$this->assertFiltering('../baz.txt', 'http://example.com/baz.txt');
|
||||
}
|
||||
|
||||
function testFilterRelativePathWithEndingDotDot() {
|
||||
$this->assertFiltering('..', 'http://example.com/');
|
||||
}
|
||||
|
||||
function testFilterRelativePathTooManyDotDots() {
|
||||
$this->assertFiltering('../../', 'http://example.com/');
|
||||
}
|
||||
|
||||
function testFilterAppendingQueryAndFragment() {
|
||||
$this->assertFiltering('/foo.php?q=s#frag', 'http://example.com/foo.php?q=s#frag');
|
||||
}
|
||||
|
||||
// edge cases below
|
||||
|
||||
function testFilterAbsolutePathBase() {
|
||||
$this->setBase('/foo/baz.txt');
|
||||
$this->assertFiltering('test.php', '/foo/test.php');
|
||||
}
|
||||
|
||||
function testFilterAbsolutePathBaseDirectory() {
|
||||
$this->setBase('/foo/');
|
||||
$this->assertFiltering('test.php', '/foo/test.php');
|
||||
}
|
||||
|
||||
function testFilterAbsolutePathBaseBelow() {
|
||||
$this->setBase('/foo/baz.txt');
|
||||
$this->assertFiltering('../../test.php', '/test.php');
|
||||
}
|
||||
|
||||
function testFilterRelativePathBase() {
|
||||
$this->setBase('foo/baz.html');
|
||||
$this->assertFiltering('foo.php', 'foo/foo.php');
|
||||
}
|
||||
|
||||
function testFilterRelativePathBaseBelow() {
|
||||
$this->setBase('../baz.html');
|
||||
$this->assertFiltering('test/strike.html', '../test/strike.html');
|
||||
}
|
||||
|
||||
function testFilterRelativePathBaseWithAbsoluteURI() {
|
||||
$this->setBase('../baz.html');
|
||||
$this->assertFiltering('/test/strike.html');
|
||||
}
|
||||
|
||||
function testFilterRelativePathBaseWithDot() {
|
||||
$this->setBase('../baz.html');
|
||||
$this->assertFiltering('.', '../');
|
||||
}
|
||||
|
||||
// error case
|
||||
|
||||
function testErrorNoBase() {
|
||||
$this->setBase(null);
|
||||
$this->expectError('URI.MakeAbsolute is being ignored due to lack of value for URI.Base configuration');
|
||||
$this->assertFiltering('foo/bar.txt');
|
||||
}
|
||||
|
||||
}
|
@@ -13,7 +13,7 @@ class HTMLPurifier_URIHarness extends HTMLPurifier_Harness
|
||||
*/
|
||||
function prepareURI(&$uri, &$expect_uri) {
|
||||
$parser = new HTMLPurifier_URIParser();
|
||||
if ($expect_uri === true) $uri = $expect_uri;
|
||||
if ($expect_uri === true) $expect_uri = $uri;
|
||||
$uri = $parser->parse($uri);
|
||||
if ($expect_uri !== false) {
|
||||
$expect_uri = $parser->parse($expect_uri);
|
||||
|
@@ -106,6 +106,7 @@ $test_files[] = 'HTMLPurifier/URIDefinitionTest.php';
|
||||
$test_files[] = 'HTMLPurifier/URIFilter/DisableExternalTest.php';
|
||||
$test_files[] = 'HTMLPurifier/URIFilter/DisableExternalResourcesTest.php';
|
||||
$test_files[] = 'HTMLPurifier/URIFilter/HostBlacklistTest.php';
|
||||
$test_files[] = 'HTMLPurifier/URIFilter/MakeAbsoluteTest.php';
|
||||
$test_files[] = 'HTMLPurifier/URIParserTest.php';
|
||||
$test_files[] = 'HTMLPurifier/URISchemeRegistryTest.php';
|
||||
$test_files[] = 'HTMLPurifier/URISchemeTest.php';
|
||||
|
Reference in New Issue
Block a user