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"