Skip to content

Commit 25595b7

Browse files
committed
Test xs:string for valid characters according to the XML 1.1 specifications
1 parent 23e7422 commit 25595b7

3 files changed

Lines changed: 22 additions & 0 deletions

File tree

src/XML/Assert/StringTrait.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,10 @@ trait StringTrait
1515
*/
1616
protected static function validString(string $value, string $message = ''): void
1717
{
18+
Assert::regex(
19+
$value,
20+
'/^[\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x{10000}-\x{10FFFF}]*$/u',
21+
SchemaViolationException::class,
22+
);
1823
}
1924
}

src/XMLSchema/Type/StringValue.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
namespace SimpleSAML\XMLSchema\Type;
66

7+
use SimpleSAML\XML\Assert\Assert;
8+
use SimpleSAML\XMLSchema\Exception\SchemaViolationException;
79
use SimpleSAML\XMLSchema\Type\Interface\AbstractAnySimpleType;
810

911
/**
@@ -12,4 +14,16 @@
1214
class StringValue extends AbstractAnySimpleType
1315
{
1416
public const string SCHEMA_TYPE = 'string';
17+
18+
19+
/**
20+
* Validate the value.
21+
*
22+
* @param string $value
23+
* @throws \SimpleSAML\XMLSchema\Exception\SchemaViolationException on failure
24+
*/
25+
protected function validateValue(string $value): void
26+
{
27+
Assert::validString($value, SchemaViolationException::class);
28+
}
1529
}

tests/XML/Assert/StringTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
use SimpleSAML\Assert\AssertionFailedException;
1111
use SimpleSAML\XML\Assert\Assert;
1212

13+
use function chr;
14+
1315
/**
1416
* Class \SimpleSAML\Test\XML\Assert\StringTest
1517
*
@@ -42,6 +44,7 @@ public static function provideString(): array
4244
return [
4345
'preserve spaces' => [true, ' Snoopy '],
4446
'replace whitespace' => [true, " Snoopy\t\n\rrulez "],
47+
'invalid character' => [false, "Valid text with " . chr(0) . " invalid null byte"],
4548
];
4649
}
4750
}

0 commit comments

Comments
 (0)