XWork FileManager does not adequately decode URLs
-------------------------------------------------
Key: WW-3309
URL: https://issues.apache.org/struts/browse/WW-3309
Project: Struts 2
Issue Type: Bug
Components: Dispatch Filter
Affects Versions: 2.1.8
Environment: Linux/Windows running Tomcat 6.0.18/6.0.20
Reporter: Ryan Fields
Priority: Minor
The JarEntryRevision inner class of XWork's FileManager class lazily decodes
URLs by calling replace to change instances of %20 into spaces. Unfortunately,
file URLs can and occasionally do contain other % encoded characters. In order
for the referenced file to be opened, these % encoded characters must be
transformed into their decoded equivalents.
This bug is directly relevant to Tomcat 6, which uses a naming convention of
context#subpath.war in its autodeployer to facilitate deployment of a web
application into a context like /context/subpath. Tomcat deploys a war named
in this manner to webapp/context#subpath, meaning that all absolute file
references will contain a #. Because # (along with all other encoded
characters except for space) do not get URL decoded by JarEntryRevision's build
method, it is impossible to deploy a Struts 2 application named using this
convention into Tomcat 6.
I would think that this could be fixed by running the string representation of
the URL through java.net.URLDecoder's decode method before handing it to the
File constructor. The only snag is that decode expects a character encoding to
be passed to it, and I'm not quite sure how to assume the correct encoding in a
cross-platform manner. It might be feasible to assume UTF-8 for all URLs.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.