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];


Reply via email to