diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fbbb5ea..37e76de7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Changed - ci: Run workflows against 5.x.x branches ([#859](https://github.com/jsonrainbow/json-schema/pull/859)) +### Fixed +- UriValidator: Allow `file:/` and `file:///` ([#856](https://github.com/jsonrainbow/json-schema/discussions/856)) ## [6.6.3] - 2025-12-02 ### Changed diff --git a/src/JsonSchema/Tool/Validator/UriValidator.php b/src/JsonSchema/Tool/Validator/UriValidator.php index c5e2cf6e..178fce91 100644 --- a/src/JsonSchema/Tool/Validator/UriValidator.php +++ b/src/JsonSchema/Tool/Validator/UriValidator.php @@ -21,7 +21,7 @@ public static function isValid(string $uri): bool // RFC 3986: Non-Hierarchical URIs (mailto, data, urn, news) $nonHierarchicalPattern = '/^ - (mailto|data|urn|news|tel): # Only allow known non-hierarchical schemes + (mailto|data|urn|news|tel|file): # Only allow known non-hierarchical schemes (.+) # Must contain at least one character after scheme $/ix'; diff --git a/tests/Tool/Validator/UriValidatorTest.php b/tests/Tool/Validator/UriValidatorTest.php index 7eedaca8..69b7282e 100644 --- a/tests/Tool/Validator/UriValidatorTest.php +++ b/tests/Tool/Validator/UriValidatorTest.php @@ -34,6 +34,9 @@ public function validUriDataProvider(): \Generator yield 'OASIS URN URI' => ['uri' => 'urn:oasis:names:specification:docbook:dtd:xml:4.1.2']; yield 'Custom URI with underscore' => ['uri' => 'custom://reg_name/path/file.json']; yield 'Custom URI with tilde' => ['uri' => 'custom://reg~name/path/file.json']; + yield 'File URI with implicit localhost (empty host)' => ['uri' => 'file:///path/to/file.txt']; + yield 'File URI with explicit host' => ['uri' => 'file://some-host/path/to/file.txt']; + yield 'File URI without any host' => ['uri' => 'file:/path/to/file.txt']; } public function invalidUriDataProvider(): \Generator