Author: awiner
Date: Fri Aug 21 18:55:06 2009
New Revision: 806676

URL: http://svn.apache.org/viewvc?rev=806676&view=rev
Log:
Fix NPE if sanitized proxy requests fail to include a mime type

Modified:
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriterTest.java

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java?rev=806676&r1=806675&r2=806676&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java
 Fri Aug 21 18:55:06 2009
@@ -18,6 +18,7 @@
  */
 package org.apache.shindig.gadgets.render;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.sanselan.ImageFormat;
 import org.apache.sanselan.ImageReadException;
 import org.apache.sanselan.Sanselan;
@@ -64,14 +65,19 @@
     if (request.isSanitizationRequested()) {
       ContentRewriterFeature rewriterFeature =
         rewriterFeatureFactory.createRewriteAllFeature(request.getCacheTtl());
-      if (request.getRewriteMimeType().equalsIgnoreCase("text/css")) {
+      if (StringUtils.isEmpty(request.getRewriteMimeType())) {
+        logger.log(Level.WARNING, "Request to sanitize without content type 
for "
+            + request.getUri());
+        content.setContent("");
+        return true;
+      } else if (request.getRewriteMimeType().equalsIgnoreCase("text/css")) {
         return rewriteProxiedCss(request, resp, content, rewriterFeature);
       } else if 
(request.getRewriteMimeType().toLowerCase().startsWith("image/")) {
         return rewriteProxiedImage(request, resp, content);
       } else {
         logger.log(Level.WARNING, "Request to sanitize unknown content type "
             + request.getRewriteMimeType()
-            + " for " + request.getUri().toString());
+            + " for " + request.getUri());
         content.setContent("");
         return true;
       }

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriterTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriterTest.java?rev=806676&r1=806675&r2=806676&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriterTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriterTest.java
 Fri Aug 21 18:55:06 2009
@@ -105,4 +105,23 @@
             
"org/apache/shindig/gadgets/rewrite/image/inefficient.png"))).create();
     assertNull(rewrite(req, response));
   }
+
+  @Test
+  public void enforceUnknownMimeTypeRejected() throws Exception {
+    HttpRequest req = new HttpRequest(CONTENT_URI);
+    req.setRewriteMimeType("text/foo");
+    HttpResponse response = new 
HttpResponseBuilder().setResponseString("doEvil()").create();
+    String sanitized = "";
+    assertEquals(sanitized, rewrite(req, response));
+  }
+
+  @Test
+  public void enforceMissingMimeTypeRejected() throws Exception {
+    HttpRequest req = new HttpRequest(CONTENT_URI);
+    // A request without a mime type, but requesting sanitization, should be 
rejected
+    req.setRewriteMimeType(null);
+    HttpResponse response = new 
HttpResponseBuilder().setResponseString("doEvil()").create();
+    String sanitized = "";
+    assertEquals(sanitized, rewrite(req, response));
+  }
 }


Reply via email to