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();
+ }
}