Skip to content

Commit 1cc4b6e

Browse files
committed
file schema fixes
- expand uri validator tests - treat file as non-hierarchical
1 parent 134e989 commit 1cc4b6e

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

src/JsonSchema/Tool/Validator/UriValidator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public static function isValid(string $uri): bool
2121

2222
// RFC 3986: Non-Hierarchical URIs (mailto, data, urn, news)
2323
$nonHierarchicalPattern = '/^
24-
(mailto|data|urn|news|tel): # Only allow known non-hierarchical schemes
24+
(mailto|data|urn|news|tel|file): # Only allow known non-hierarchical schemes
2525
(.+) # Must contain at least one character after scheme
2626
$/ix';
2727

tests/Tool/Validator/UriValidatorTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,14 @@ public function validUriDataProvider(): \Generator
3030
yield 'IPV6 HTTP URI' => ['uri' => 'http://[2001:db8::ff00:42:8329]'];
3131
yield 'Mailto URI' => ['uri' => 'mailto:[email protected]'];
3232
yield 'Data URI' => ['uri' => 'data:text/plain;charset=utf-8,Hello%20World!'];
33+
yield 'Data URI with base64' => ['uri' => 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA'];
3334
yield 'ISBN URN URI' => ['uri' => 'urn:isbn:0451450523'];
3435
yield 'OASIS URN URI' => ['uri' => 'urn:oasis:names:specification:docbook:dtd:xml:4.1.2'];
3536
yield 'Custom URI with underscore' => ['uri' => 'custom://reg_name/path/file.json'];
3637
yield 'Custom URI with tilde' => ['uri' => 'custom://reg~name/path/file.json'];
38+
yield 'File URI with implicit localhost (empty host)' => ['uri' => 'file:///path/to/file.txt'];
39+
yield 'File URI with explicit host' => ['uri' => 'file://some-host/path/to/file.txt'];
40+
yield 'File URI without any host' => ['uri' => 'file:/path/to/file.txt'];
3741
}
3842

3943
public function invalidUriDataProvider(): \Generator
@@ -47,5 +51,7 @@ public function invalidUriDataProvider(): \Generator
4751
yield 'Invalid path characters with "^"' => ['uri' => 'http://example.com/^invalid'];
4852
yield 'Only mailto:' => ['uri' => 'mailto:'];
4953
yield 'Invalid email used in mailto:' => ['uri' => 'mailto:[email protected]'];
54+
// Cannot be validated properly with regex only
55+
// yield 'Invalid file uri (not enough slashes)' => ['uri' => 'file://path/to/file.txt'];
5056
}
5157
}

0 commit comments

Comments
 (0)