2017-01-17 22:19 GMT+03:00 Mark Thomas <ma...@apache.org>: > On 17/01/2017 18:07, Christopher Schultz wrote: >> Mark, >> >> On 1/16/17 6:24 AM, Mark Thomas wrote: >>> For the background see: >>> https://github.com/spring-projects/spring-boot/issues/7949 >>> >>> The short version is: >>> >>> * is seen as a wild card in some environments. >>> >>> The options are: >>> $ & ' ( ) * , - . : ; @ _ ~ >>> (all followed by /) >> >> Obviously you can't use "." since that is in 99% of WAR filenames. The >> ";" character is used for file-versions in VMS. I'm not sure how many >> VMS environments are running Tomcat, but ... it's a thing. Hyphen (-) >> and underscore (_) are probably too popular. I'd say that $ & : @ * are >> good contenders. But we are trying to replace * no? >> >>> Ideally we want a character that: >>> - is unlikely to appear in a file name (particularly at the end) >>> - does not have a special meaning that could conflict when using it in >>> combination with / in a URI to mark the start of the internal WAR path. >>> >>> Thoughts, comments, reasons for excluding one or more of these >>> characters welcome. >> >> So you want a character that can be used in the WAR file name that >> converts to a "*" in the context-path? Or you want a character in a >> war:// URL that can be used as the barrier between the physical filename >> and the logical file within the WAR file? If the latter, what's wrong >> with the jar:// usage of "!/" ? > > We need to be able to reference resources in JARs in WARs. Experience > has shown that nest jar URLs don't work. We needed a dedicated war URL > format. We currently use: > war://...*/... > > We previously used > war://...^/... > > The former has issues in some use cases. The latter results in invalid URLs. > >> We are already using # for / and IMO that can be buggy since # has >> meaning in URLs. What about using an escape-character instead of a stand-in? > > It has to be a character that Java will expect in a URL.
1. The original bug report was about some embedding of Tomcat. Maybe it will be enough to make the value configurable? 2. Are we limited to US-ASCII? (If it were unicode, there are a lot of funny characters to choose from.) I see that these URLs can be used in catalina.policy (there is an example there), so it looks that we are limited. 3. We can use a delimiter that is longer than 2 characters. We are not limited to "char + '/'". 4. If the file part must refer an existing file, we can look for ".war/" incrementally and check whether it is an existing file. Though depending on how this is implemented it this may lead to false positives on Windows because of case-insensivity. (I remember how years ago I observed collision of "manager" package vs "Manager" class in isPackage() check during compilation of JSPs, trying to run Tomcat as compiled by Eclipse (as a set of classes, not packed into .jars) https://bz.apache.org/bugzilla/show_bug.cgi?id=47323 ) Best regards, Konstantin Kolinko --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org