TAP5-2632: slashes in context URLs are not handled properly
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ChecksumPath.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ChecksumPath.java
index 074fd86..7e5f95e 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ChecksumPath.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/ChecksumPath.java
@@ -14,6 +14,7 @@
package org.apache.tapestry5.internal.services.assets;
+import org.apache.commons.lang3.StringUtils;
import org.apache.tapestry5.internal.services.ResourceStreamer;
import org.apache.tapestry5.ioc.Resource;
@@ -27,6 +28,8 @@
*/
public class ChecksumPath
{
+ private static final String NON_EXISTING_RESOURCE = "_________________________";
+
public final String checksum;
public final String resourcePath;
@@ -38,13 +41,20 @@
this.streamer = streamer;
int slashx = extraPath.indexOf('/');
- checksum = extraPath.substring(0, slashx);
+ checksum = slashx >= 0 ? extraPath.substring(0, slashx) : null;
String morePath = extraPath.substring(slashx + 1);
- resourcePath = baseFolder == null
- ? morePath
- : baseFolder + "/" + morePath;
+ if (StringUtils.isNotBlank(morePath)) {
+ resourcePath = baseFolder == null
+ ? morePath
+ : baseFolder + "/" + morePath;
+ }
+ else {
+ // When we only have something which looks like a checksum but no actual path.
+ // For example, /assets/META-INF/
+ resourcePath = NON_EXISTING_RESOURCE;
+ }
}
/**