Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Be less restrictive on what characters are disallowed in custom slugs #2310

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com), and this

This option effectively replaces the old `REDIRECT_APPEND_EXTRA_PATH` option, which is now deprecated and will be removed in Shlink 5.0.0

* [#2156](https://github.com/shlinkio/shlink/issues/2156) Be less restrictive on what characters are disallowed in custom slugs.

All [URI-reserved characters](https://datatracker.ietf.org/doc/html/rfc3986#section-2.2) were disallowed up until now, but from now on, only the gen-delimiters are.

### Changed
* [#2281](https://github.com/shlinkio/shlink/issues/2281) Update docker image to PHP 8.4
* [#2124](https://github.com/shlinkio/shlink/issues/2124) Improve how Shlink decides if a GeoLite db file needs to be downloaded, and reduces the chances for API limits to be reached.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@ public function isValid(mixed $value): bool
return false;
}

// URL reserved characters: https://datatracker.ietf.org/doc/html/rfc3986#section-2.2
$reservedChars = "!*'();:@&=+$,?%#[]";
// URL gen-delimiter reserved characters, except `/`: https://datatracker.ietf.org/doc/html/rfc3986#section-2.2
$reservedChars = ':?#[]@';
if (! $this->options->multiSegmentSlugsEnabled) {
// Slashes should be allowed for multi-segment slugs
// Slashes should only be allowed if multi-segment slugs are enabled
$reservedChars .= '/';
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,11 @@ public function valuesWithReservedCharsAreInvalid(string $value): void

public static function provideInvalidValues(): iterable
{
yield ['port:8080'];
yield ['foo?bar=baz'];
yield ['some-thing#foo'];
yield ['call()'];
yield ['array[]'];
yield ['brackets[]'];
yield ['email@example.com'];
yield ['wildcard*'];
yield ['$500'];
}

public function createValidator(bool $multiSegmentSlugsEnabled = false): CustomSlugValidator
Expand Down