[freenet-cvs] r11172 - trunk/freenet/src/freenet/clients/http

toad at freenetproject.org toad at freenetproject.org
Fri Dec 1 17:50:27 UTC 2006


Author: toad
Date: 2006-12-01 17:50:26 +0000 (Fri, 01 Dec 2006)
New Revision: 11172

Modified:
   trunk/freenet/src/freenet/clients/http/ToadletContextImpl.java
Log:
Fix bad characters in URL bug.

Modified: trunk/freenet/src/freenet/clients/http/ToadletContextImpl.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/ToadletContextImpl.java	2006-12-01 17:27:22 UTC (rev 11171)
+++ trunk/freenet/src/freenet/clients/http/ToadletContextImpl.java	2006-12-01 17:50:26 UTC (rev 11172)
@@ -3,6 +3,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.net.Socket;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -11,8 +13,10 @@
 import java.util.Enumeration;
 import java.util.TimeZone;
 
+import freenet.support.HTMLEncoder;
 import freenet.support.Logger;
 import freenet.support.MultiValueTable;
+import freenet.support.URIPreEncoder;
 import freenet.support.io.Bucket;
 import freenet.support.io.BucketFactory;
 import freenet.support.io.BucketTools;
@@ -74,8 +78,13 @@
 		sendError(sockOutputStream, 404, "Service not found", shouldDisconnect, null);
 	}
 	
-	private static void sendURIParseError(OutputStream os, boolean shouldDisconnect) throws IOException {
-		sendError(os, 400, "URI parse error", shouldDisconnect, null);
+	private static void sendURIParseError(OutputStream os, boolean shouldDisconnect, Throwable e) throws IOException {
+		StringWriter sw = new StringWriter();
+		PrintWriter pw = new PrintWriter(sw);
+		e.printStackTrace(pw);
+		pw.close();
+		String message = "<html><head><title>URI parse error</title></head><body><p>"+HTMLEncoder.encode(e.getMessage())+"</p><pre>\n"+sw.toString();
+		sendError(os, 400, "URI parse error", message, shouldDisconnect, null);
 	}
 	
 	public void sendReplyHeaders(int replyCode, String replyDescription, MultiValueTable mvt, String mimeType, long contentLength) throws ToadletContextClosedException, IOException {
@@ -196,16 +205,10 @@
 				
 				URI uri;
 				try {
-					//uri = new URI(URLDecoder.decode(split[1]));
-					uri = new URI(split[1]);
+					uri = URIPreEncoder.encodeURI(split[1]).normalize();
 				} catch (URISyntaxException e) {
-					sendURIParseError(sock.getOutputStream(), true);
+					sendURIParseError(sock.getOutputStream(), true, e);
 					return;
-					/*
-					 } catch (URLEncodedFormatException e) {
-					 sendURIParseError(sock.getOutputStream(), true);
-					 return;
-					 */
 				}
 				
 				String method = split[0];




More information about the cvs mailing list