[
https://issues.apache.org/jira/browse/SLING-4856?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14613417#comment-14613417
]
Dirk Rudolph commented on SLING-4856:
-------------------------------------
>From my point of view there are two possible solutions:
1. Proper handling of not normalised paths in {{resolveInternal}}
- Extend {{ResourceUtil#normalize(String)}} to replace "//" by single slash
- Call {{ResourceUtil#normalize(String)}} on the path passed to
{{resolveInternal}}
2. Logging of not normalised result of applied mapping
- Add a method {{ResourceUtil#isNormalized(String)}}
- if log level is warning or higher call it after the mapping has been applied
and log a warning if it returns false
What do you think? I would volunteer to provide a patch and related test cases
for that.
> Resource resolution breaks selector string when mapped path is not normalised
> -----------------------------------------------------------------------------
>
> Key: SLING-4856
> URL: https://issues.apache.org/jira/browse/SLING-4856
> Project: Sling
> Issue Type: Bug
> Components: ResourceResolver
> Affects Versions: Resource Resolver 1.1.14
> Reporter: Dirk Rudolph
> Priority: Minor
>
> *Description*
> During resource resolution the resource metadata are populated with values
> used for the initialisation of the {{SlingHttpServletRequest}} in the
> {{SlingRequestProcessorImpl}}. The problem is that those metadata may be
> broken when there is a misconfigured mapping applied to the request path info.
> *How to reproduce*
> 1. Configure the {{ResourceResolverFactory}} to have a mapping {{/>/prefix}}.
> 2. Create a {{Resource}} /content/path/to/resource
> 3. Access the {{Resource}}
> 3 a) using /content/path/to/resource.selector1.selector2.html/suffix.html
> 3 b) using
> /prefix/content/path/to/resource.selector1.selector2.html/suffix.html
> _Expected result_
> - The path can be resolved to the {{Resource}} (/)
> - The selector string is selector1.selector2 (x)
> - The suffix is /suffix.html (/)
> _Actual result_
> In the second case (b) the selector string has a leading ".". Which causes
> the {{RequestPathInfo}} to return a {{String\[3\]}}, where the first entry is
> an empty {{String}}.
> *Details*
> This is caused by the following code in {{resolveInternal}}
> {code}
> final String path = resolutionPath.toString();
> final String pathInfo = absPath.substring(path.length());
> resource.getResourceMetadata().setResolutionPath(path);
> resource.getResourceMetadata().setResolutionPathInfo(pathInfo);
> {code}
> The problem is that in this special case the resolved path starts with a "//"
> and is therefor not properly normalised. As the resolution is working
> properly and returned resource has its path normalised the length of resource
> path part in the absPath and resoultionPath differ by one. This causes
> resoultion path info to contain the last char of the resource path part of
> the absPath, which then causes wrong interpretation and extraction of the
> selector string from the resolution path info in the {{ResourceMetaData}}
> *Use case*
> In our current project based on AEM6 we use such a path prefix to use
> separated dispatcher farms for caching. We were able to fix the internal
> issue by properly configuring the prefix but as a user i would expect Sling
> to handle this misconfigured scenario either properly or at least log a
> warning that the mapped path is not normalised because debugging it was a
> little bit tricky.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)