-
Notifications
You must be signed in to change notification settings - Fork 447
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
Fix path support after unlimited optional placeholders #292
base: master
Are you sure you want to change the base?
Fix path support after unlimited optional placeholders #292
Conversation
d291392
to
37f2f19
Compare
Note: 1.3.0 is also impacted by this bug. |
See the following upstream issues for further information: - nikic/FastRoute#292 - nikic/FastRoute#293
37f2f19
to
15eceef
Compare
Any chance of a review on this issue? Thanks |
When using a route which contains both an unlimited optional placeholder, and another optional placeholder afterwards, the incorrect values are collected. For example, given the following route: ``` /go/to/[{location:.*}[/info/{subpage}]] ``` The following behaviour is currently observed: - route: `/go/to/[{location:.*}[/info/{subpage}]]` - url: `/go/to/australia/perth/info/about` - location: `'australia/perth/info/about'` - subpage: `''` Note that the `location` contains `/info/about` and the `subpage` is empty. This is inconsistent with the behaviour where an unlimited value is _not_ used: - route: `/go/to/[{location}[/info/{subpage}]]` - url: `/go/to/australia/info/about` - location: `'australia'` - subpage: `'about'` In the case of the unlimited optional path, the expected behaviour is: The correct value would be: - route: `/go/to/[{location:.*}[/info/{subpage}]]` - url: `/go/to/australia/perth/info/about` - location: `'australia/perth'` - subpage: `'about'` This commit change updates the route dispatcher to reverse the order of the routes when adding routes to the router, which brings the unlimited path placeholder format inline with limited path placeholders. Signed-off-by: Andrew Nicols <andrew@nicols.co.uk>
15eceef
to
33637cd
Compare
I believe I've solved all of the GHA failures. |
@andrewnicols I'll have a look soon. The problem here is that this will affect the performance of the matching process. Also it isn't really a bug, as unbound parameters aren't officially supported - thus the lack of tests for it. |
I don't think this needs a fix. The regex should be simply ungreedy, i.e. |
When using a route which contains both an unlimited optional placeholder, and another optional placeholder afterwards, the incorrect values are collected.
For example, given the following route:
The following behaviour is currently observed:
/go/to/[{location:.*}[/info/{subpage}]]
/go/to/australia/perth/info/about
'australia/perth/info/about'
''
Note that the
location
contains/info/about
and thesubpage
is empty.This is inconsistent with the behaviour where an unlimited value is not used:
/go/to/[{location}[/info/{subpage}]]
/go/to/australia/info/about
'australia'
'about'
In the case of the unlimited optional path, the expected behaviour is: The correct value would be:
/go/to/[{location:.*}[/info/{subpage}]]
/go/to/australia/perth/info/about
'australia/perth'
'about'
This commit change updates the route dispatcher to reverse the order of the routes when adding routes to the router, which brings the unlimited path placeholder format inline with limited path placeholders.