[
https://issues.apache.org/jira/browse/WICKET-1821?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Igor Vaynberg resolved WICKET-1821.
-----------------------------------
Assignee: Igor Vaynberg
Fix Version/s: 1.5-M1
(was: 1.5-M2)
Resolution: Fixed
> WebRequestCodingStrategy assumes mount path prefix for matching
> ---------------------------------------------------------------
>
> Key: WICKET-1821
> URL: https://issues.apache.org/jira/browse/WICKET-1821
> Project: Wicket
> Issue Type: Bug
> Components: wicket
> Affects Versions: 1.3.1, 1.3.2, 1.3.3, 1.3.4, 1.4-M1, 1.4-M2, 1.4-M3
> Environment: Linux (openSUSE 10.2 and 11.0), x86_64, jetty; but
> affects all environments
> Reporter: Pascal Bleser
> Assignee: Igor Vaynberg
> Priority: Minor
> Fix For: 1.5-M1
>
> Original Estimate: 4h
> Remaining Estimate: 4h
>
> WebRequestCodingStrategy makes an assumption about
> IRequestTargetUrlCodingStrategy implementations in what seems to be a minor
> optimization:
> in WebRequestCodingStrategy.MountsMap.strategyForPath:
> for (Entry<String, IRequestTargetUrlCodingStrategy> entry : map.entrySet())
> {
> final String key = entry.getKey();
> if (path.startsWith(key))
> {
> IRequestTargetUrlCodingStrategy strategy = entry.getValue();
> if (strategy.matches(path))
> {
> return strategy;
> }
> }
> }
> While it should actually be the following instead:
> for (IRequestTargetUrlCodingStrategy strategy : listMounts()) {
> if ((strategy != null) && strategy.matches(path)) {
> return strategy;
> }
> }
> I ran into that issue while implementing a custom
> IRequestTargetUrlCodingStrategy that uses a pattern based approach, e.g. for
> an URL like this:
> /customer/1000/site/100/edit
> It is mounted with the following String:
> "/customer/${customerId}/site/${siteId}/edit"
> but it is simply skipped by
> WebRequestCodingStrategy.MountsMap.strategyForPath() because the mount prefix
> doesn't match (as in a simple String.startsWith(), as performed by
> strategyForPath()), while only calling match(String) on the
> IRequestTargetUrlCodingStrategy works, because match(String) is implemented
> accordingly in the custom IRequestTargetUrlCodingStrategy.
> I would consider this to be a bug, because the current implementation in
> WebRequestCodingStrategy.MountsMap.strategyForPath() assumes that all
> IRequestTargetUrlCodingStrategy have a fixed prefix that can be matched using
> String.startsWith(), while that isn't necessarily the case.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.