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