You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by an...@apache.org on 2008/03/29 01:11:43 UTC

svn commit: r642446 - in /tapestry/tapestry4/trunk/tapestry-framework/src: java/org/apache/tapestry/engine/encoders/AssetEncoder.java test/org/apache/tapestry/engine/encoders/AssetEncoderTest.java

Author: andyhot
Date: Fri Mar 28 17:11:42 2008
New Revision: 642446

URL: http://svn.apache.org/viewvc?rev=642446&view=rev
Log:
TAPESTRY-1915: handle NPE and StringIndexOOBE in assetencoder

Modified:
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/AssetEncoder.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/AssetEncoderTest.java

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/AssetEncoder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/AssetEncoder.java?rev=642446&r1=642445&r2=642446&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/AssetEncoder.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/AssetEncoder.java Fri Mar 28 17:11:42 2008
@@ -67,16 +67,24 @@
     {
         if (!encoding.getServletPath().equals(_path))
             return;
-        
+        encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
         String pathInfo = encoding.getPathInfo();
+        if (pathInfo == null)
+            pathInfo = "/";
         
         // The lead character is a slash, so find the next slash (the divider between the
         // digest and the path).
         int slashx = pathInfo.indexOf('/', 1);
-        
-        encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
-        encoding.setParameterValue(AssetService.DIGEST, pathInfo.substring(1, slashx));
-        encoding.setParameterValue(AssetService.PATH, pathInfo.substring(slashx));
+        if (slashx < 0) 
+        {
+            encoding.setParameterValue(AssetService.DIGEST, "");
+            encoding.setParameterValue(AssetService.PATH, "");
+        }
+        else
+        {
+            encoding.setParameterValue(AssetService.DIGEST, pathInfo.substring(1, slashx));
+            encoding.setParameterValue(AssetService.PATH, pathInfo.substring(slashx));
+        }
     }
     
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/AssetEncoderTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/AssetEncoderTest.java?rev=642446&r1=642445&r2=642446&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/AssetEncoderTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/AssetEncoderTest.java Fri Mar 28 17:11:42 2008
@@ -189,4 +189,46 @@
 
         verify();
     }
+
+    public void test_Decode_Null_Pathinfo()
+    {
+        ServiceEncoding encoding = newEncoding();
+
+        trainGetServletPath(encoding, "/assets");
+        trainGetPathInfo(encoding, null);
+
+        encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
+        encoding.setParameterValue(AssetService.DIGEST, "");
+        encoding.setParameterValue(AssetService.PATH, "");
+
+        replay();
+
+        AssetEncoder encoder = new AssetEncoder();
+        encoder.setPath("/assets");
+
+        encoder.decode(encoding);
+
+        verify();
+    }
+    
+    public void test_Decode_Empty_Pathinfo()
+    {
+        ServiceEncoding encoding = newEncoding();
+
+        trainGetServletPath(encoding, "/assets");
+        trainGetPathInfo(encoding, "/");
+
+        encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
+        encoding.setParameterValue(AssetService.DIGEST, "");
+        encoding.setParameterValue(AssetService.PATH, "");         
+
+        replay();
+
+        AssetEncoder encoder = new AssetEncoder();
+        encoder.setPath("/assets");
+
+        encoder.decode(encoding);
+
+        verify();
+    }
 }