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;
+        }
     }
 
     /**