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/19 20:05:03 UTC

svn commit: r911933 - in /shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/servlet/ConcatProxyServlet.java test/java/org/apache/shindig/gadgets/servlet/ConcatProxyServletTest.java

Author: johnh
Date: Fri Feb 19 19:05:03 2010
New Revision: 911933

URL: http://svn.apache.org/viewvc?rev=911933&view=rev
Log:
Handle bad URL in concat servlet.

Patch provided by Ziv Horesh.


Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ConcatProxyServlet.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ConcatProxyServletTest.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=911933&r1=911932&r2=911933&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 Fri Feb 19 19:05:03 2010
@@ -23,15 +23,9 @@
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.shindig.common.servlet.HttpUtil;
 import org.apache.shindig.common.servlet.InjectedServlet;
+import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.gadgets.GadgetException;
 
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
-
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
@@ -39,6 +33,13 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
 /**
  * Servlet which concatenates the content of several proxied HTTP responses
  *
@@ -106,7 +107,17 @@
         break;
       }
       try {
-
+        try {
+          // Validate the url:
+          Uri uri = Uri.parse(url);
+          url = uri.toString();
+        } catch (Uri.UriException e) {
+          // ServletOutputStream.println support only ascii, so lets use write:
+          response.getOutputStream().write(
+              formatHttpError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage())
+                .getBytes("UTF-8"));
+          continue;
+        }
         wrapper.processUrl(url);
         proxyHandler.doFetch(new RequestWrapper(request, url), wrapper);
 
@@ -381,7 +392,7 @@
    */
   private static class EscapedServletOutputStream extends ServletOutputStream {
 
-    private ByteArrayOutputStream tempStream;
+    private final ByteArrayOutputStream tempStream;
     protected EscapedServletOutputStream() {
       tempStream = new ByteArrayOutputStream();
     }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ConcatProxyServletTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ConcatProxyServletTest.java?rev=911933&r1=911932&r2=911933&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ConcatProxyServletTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ConcatProxyServletTest.java Fri Feb 19 19:05:03 2010
@@ -77,7 +77,18 @@
         + data + "/* ---- End " + url + " ---- */\r\n";
     return res;
   }
-  
+
+  private String addErrComment(String url, int code) {
+    String res = "/* ---- Start " + url + " ---- */\r\n"
+        + "/* ---- Error " + code + " ---- */\r\n";
+    return res;
+  }
+
+  private String addErrComment(String url, int code, String msg) {
+    String res = "/* ---- Error " + code + ", " + msg + " ---- */";
+    return res;
+  }
+
   /**
    * Simulate the asJSON result of one script
    * @param url - the script url
@@ -113,7 +124,7 @@
     String results = addComment(SCRT1, URL1.toString()) + addComment(SCRT2,URL2.toString());
     runConcat(results, URL1,URL2);
   }
-  
+
   @Test
   public void testThreeConcat() throws Exception {
     String results = addComment(SCRT1, URL1.toString()) + addComment(SCRT2,URL2.toString())
@@ -144,6 +155,42 @@
   }
 
   @Test
+  public void testConcat404() throws Exception {
+    String url = "http://nobodyhome.com/";
+    HttpRequest req = new HttpRequest(Uri.parse(url));
+    HttpResponse resp = new HttpResponseBuilder().setHttpStatusCode(404).create();
+    expect(pipeline.execute(req)).andReturn(resp).anyTimes();
+    
+    expect(request.getParameter("1")).andReturn(URL1.toString()).once();
+    expect(request.getParameter("2")).andReturn(url).once();
+    replay();
+    servlet.doGet(request, recorder);
+    verify();
+    
+    String results = addComment(SCRT1, URL1.toString()) + addErrComment(url,404);
+    assertEquals(results, recorder.getResponseAsString());
+    assertEquals(200, recorder.getHttpStatusCode());
+  }
+
+  @Test
+  public void testConcatBadUrl() throws Exception {
+    String url = "http://\u03C0 1";
+    expect(request.getParameter("1")).andReturn(URL1.toString()).once();
+    expect(request.getParameter("2")).andReturn(url).once();
+    replay();
+    servlet.doGet(request, recorder);
+    verify();
+
+    // Note that the results is a bit out of order. 
+    String results = addComment(SCRT1 + addErrComment(url, 400,
+        "java.lang.IllegalArgumentException: " +
+        "java.net.URISyntaxException: Illegal character in authority at index 7: " + url),
+        URL1.toString());
+    assertEquals(results, recorder.getResponseAsString());
+    assertEquals(200, recorder.getHttpStatusCode());
+  }
+
+  @Test
   public void testAsJsonConcat() throws Exception {
     expect(request.getParameter("json")).andReturn("_js").once();
     String results = "_js={\r\n"