diff --git a/library/HTMLPurifier.includes.php b/library/HTMLPurifier.includes.php index 97fcf27d..f4956fa4 100644 --- a/library/HTMLPurifier.includes.php +++ b/library/HTMLPurifier.includes.php @@ -138,6 +138,7 @@ require 'HTMLPurifier/ConfigSchema/Validator/Composite.php'; require 'HTMLPurifier/ConfigSchema/Validator/Exists.php'; require 'HTMLPurifier/ConfigSchema/Validator/NamespaceExists.php'; require 'HTMLPurifier/ConfigSchema/Validator/Or.php'; +require 'HTMLPurifier/ConfigSchema/Validator/ParseDefault.php'; require 'HTMLPurifier/ConfigSchema/Validator/ParseId.php'; require 'HTMLPurifier/ConfigSchema/Validator/ParseType.php'; require 'HTMLPurifier/ConfigSchema/Validator/Unique.php'; diff --git a/library/HTMLPurifier/ConfigSchema/Interchange.php b/library/HTMLPurifier/ConfigSchema/Interchange.php index 76fa828f..31e28775 100644 --- a/library/HTMLPurifier/ConfigSchema/Interchange.php +++ b/library/HTMLPurifier/ConfigSchema/Interchange.php @@ -66,6 +66,7 @@ class HTMLPurifier_ConfigSchema_Interchange $directive->addValidator($this->make('Exists', '_TYPE')); $directive->addValidator($this->make('Exists', '_NULL')); $directive->addValidator($this->make('Exists', 'DEFAULT')); + $directive->addValidator($this->make('ParseDefault')); // Common tests $validator->addValidator($this->make('Exists', 'DESCRIPTION')); diff --git a/library/HTMLPurifier/ConfigSchema/Validator/ParseDefault.php b/library/HTMLPurifier/ConfigSchema/Validator/ParseDefault.php new file mode 100644 index 00000000..3f21e691 --- /dev/null +++ b/library/HTMLPurifier/ConfigSchema/Validator/ParseDefault.php @@ -0,0 +1,18 @@ +parse($arr['DEFAULT'], $arr['_TYPE'], $arr['_NULL']); + } catch (HTMLPurifier_VarParserException $e) { + throw new HTMLPurifier_ConfigSchema_Exception('Invalid type for default value in '. $arr['ID'] .': ' . $e->getMessage()); + } + } + +} diff --git a/tests/HTMLPurifier/ConfigSchema/Validator/ParseDefaultTest.php b/tests/HTMLPurifier/ConfigSchema/Validator/ParseDefaultTest.php new file mode 100644 index 00000000..87b0b290 --- /dev/null +++ b/tests/HTMLPurifier/ConfigSchema/Validator/ParseDefaultTest.php @@ -0,0 +1,34 @@ + 'N.D', + 'DEFAULT' => 'true', + '_TYPE' => 'bool', + '_NULL' => false, + ); + $this->validator->validate($arr, $this->interchange); + $this->assertIdentical($arr, array( + 'ID' => 'N.D', + 'DEFAULT' => 'true', + '_TYPE' => 'bool', + '_NULL' => false, + '_DEFAULT' => true, + )); + } + + public function testValidateFail() { + $arr = array( + 'ID' => 'N.D', + 'DEFAULT' => '"asdf"', + '_TYPE' => 'int', + '_NULL' => true, + ); + $this->expectSchemaException('Invalid type for default value in N.D: Expected type int, got string'); + $this->validator->validate($arr, $this->interchange); + } + +}