You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by jo...@apache.org on 2010/02/17 00:34:38 UTC

svn commit: r910768 - in /shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/servlet/ test/java/org/apache/shindig/gadgets/servlet/

Author: johnh
Date: Tue Feb 16 23:34:37 2010
New Revision: 910768

URL: http://svn.apache.org/viewvc?rev=910768&view=rev
Log:
Avoid NumberFormatException (RuntimeException) issues when parsing TTL/refresh values.


Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ConcatProxyServlet.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServlet.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServletTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ConcatProxyServlet.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ConcatProxyServlet.java?rev=910768&r1=910767&r2=910768&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ConcatProxyServlet.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ConcatProxyServlet.java Tue Feb 16 23:34:37 2010
@@ -75,8 +75,13 @@
 
     boolean ignoreCache = proxyHandler.getIgnoreCache(request);
     if (!ignoreCache && request.getParameter(ProxyBase.REFRESH_PARAM) != null) {
-        HttpUtil.setCachingHeaders(response, Integer.valueOf(request
+      try {
+        HttpUtil.setCachingHeaders(response, Integer.parseInt(request
             .getParameter(ProxyBase.REFRESH_PARAM)));
+      } catch (NumberFormatException e) {
+        // Ignore malform ttl:
+        HttpUtil.setNoCache(response);        
+      }
     } else {
       HttpUtil.setNoCache(response);
     }

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServlet.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServlet.java?rev=910768&r1=910767&r2=910768&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServlet.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServlet.java Tue Feb 16 23:34:37 2010
@@ -22,6 +22,7 @@
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.UrlGenerator;
 import org.apache.shindig.gadgets.UrlValidationStatus;
+import org.apache.shindig.gadgets.http.BasicHttpFetcher;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.render.Renderer;
 import org.apache.shindig.gadgets.render.RenderingResults;
@@ -29,8 +30,10 @@
 import com.google.inject.Inject;
 
 import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
 
 import java.io.IOException;
+import java.util.logging.Logger;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -40,6 +43,9 @@
  */
 public class GadgetRenderingServlet extends InjectedServlet {
   static final int DEFAULT_CACHE_TTL = 60 * 5;
+
+  private static final Logger LOG = Logger.getLogger(GadgetRenderingServlet.class.getName());
+
   private Renderer renderer;
   private UrlGenerator urlGenerator;
 
@@ -81,8 +87,13 @@
           // with a query parameter.
           int ttl = DEFAULT_CACHE_TTL;
           String ttlStr = req.getParameter(ProxyBase.REFRESH_PARAM);
-          if (ttlStr != null) {
-            ttl = Integer.parseInt(ttlStr);
+          if (!StringUtils.isEmpty(ttlStr)) {
+            try {
+              ttl = Integer.parseInt(ttlStr);
+            } catch (NumberFormatException e) {
+              // Ignore malformed TTL value
+              LOG.info("Bad TTL value '" + ttlStr + "' was ignored");
+            }
           }
           HttpUtil.setCachingHeaders(resp, ttl, true);
         }
@@ -122,4 +133,4 @@
     return urlGenerator.validateIframeUrl(
         req.getRequestURL().append('?').append(req.getQueryString()).toString());
   }
-}
\ No newline at end of file
+}

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServletTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServletTest.java?rev=910768&r1=910767&r2=910768&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServletTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServletTest.java Tue Feb 16 23:34:37 2010
@@ -69,6 +69,28 @@
   }
 
   @Test
+  public void renderWithTtl() throws Exception {
+    servlet.setRenderer(renderer);
+    expect(renderer.render(isA(GadgetContext.class)))
+        .andReturn(RenderingResults.ok("working"));
+    expect(request.getParameter(ProxyBase.REFRESH_PARAM)).andReturn("120");
+    control.replay();
+    servlet.doGet(request, recorder);
+    assertEquals("private,max-age=120", recorder.getHeader("Cache-Control"));
+  }
+
+  @Test
+  public void renderWithBadTtl() throws Exception {
+    servlet.setRenderer(renderer);
+    expect(renderer.render(isA(GadgetContext.class)))
+        .andReturn(RenderingResults.ok("working"));
+    expect(request.getParameter(ProxyBase.REFRESH_PARAM)).andReturn("");
+    control.replay();
+    servlet.doGet(request, recorder);
+    assertEquals("private,max-age=300", recorder.getHeader("Cache-Control"));
+  }
+
+  @Test
   public void normalResponse() throws Exception {
     servlet.setRenderer(renderer);
     expect(renderer.render(isA(GadgetContext.class)))

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java?rev=910768&r1=910767&r2=910768&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java Tue Feb 16 23:34:37 2010
@@ -146,6 +146,23 @@
   }
 
   @Test
+  public void testGetRequestWithBadTtl() throws Exception {
+    expect(request.getParameter(ProxyBase.REFRESH_PARAM)).andReturn("foo").anyTimes();
+
+    Capture<HttpRequest> requestCapture = new Capture<HttpRequest>();
+    expect(pipeline.execute(capture(requestCapture))).andReturn(new HttpResponse(RESPONSE_BODY));
+
+    replay();
+
+    handler.fetch(request, recorder);
+
+    HttpRequest httpRequest = requestCapture.getValue();
+    assertEquals(null, recorder.getHeader("Cache-Control"));
+    assertEquals(-1, httpRequest.getCacheTtl());
+  }
+
+
+  @Test
   public void testExplicitHeaders() throws Exception {
     String headerString = "X-Foo=bar&X-Bar=baz%20foo";
 

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java?rev=910768&r1=910767&r2=910768&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java Tue Feb 16 23:34:37 2010
@@ -203,6 +203,66 @@
     verify();
   }
 
+  /**
+   * Override HttpRequest equals to check for cache control fields
+   */
+  static class HttpRequestCache extends HttpRequest {
+    public HttpRequestCache(Uri uri) {
+      super(uri);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+      if (obj instanceof HttpRequest) {
+        HttpRequest req = (HttpRequest)obj;
+        if (req.getCacheTtl() != getCacheTtl() || req.getIgnoreCache() != getIgnoreCache()) {
+          return false;
+        }
+      }
+      return super.equals(obj);
+    }
+  }
+
+  @Test
+  public void testWithCache() throws Exception {
+    String url = "http://example.org/file.evil";
+    String domain = "example.org";
+
+    expect(lockedDomainService.isSafeForOpenProxy(domain)).andReturn(true).atLeastOnce();
+    setupProxyRequestMock(domain, url);
+    expect(request.getParameter(ProxyBase.REFRESH_PARAM)).andReturn("120").atLeastOnce();
+
+    HttpRequest req = new HttpRequestCache(Uri.parse(url)).setCacheTtl(120).setIgnoreCache(false);
+    HttpResponse resp = new HttpResponse("Hello");
+    expect(pipeline.execute(req)).andReturn(resp);
+
+    replay();
+
+    proxyHandler.fetch(request, recorder);
+
+    verify();
+  }
+
+  @Test
+  public void testWithBadTtl() throws Exception {
+    String url = "http://example.org/file.evil";
+    String domain = "example.org";
+
+    expect(lockedDomainService.isSafeForOpenProxy(domain)).andReturn(true).atLeastOnce();
+    setupProxyRequestMock(domain, url);
+    expect(request.getParameter(ProxyBase.REFRESH_PARAM)).andReturn("foo").atLeastOnce();
+
+    HttpRequest req = new HttpRequestCache(Uri.parse(url)).setCacheTtl(-1).setIgnoreCache(false);
+    HttpResponse resp = new HttpResponse("Hello");
+    expect(pipeline.execute(req)).andReturn(resp);
+
+    replay();
+
+    proxyHandler.fetch(request, recorder);
+
+    verify();
+  }
+
   @Test
   public void testXForwardedFor() throws Exception {
     String url = "http://example.org/";