Mercurial Hosting > luan
changeset 1198:9d3835e88204
better query handling
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 27 Feb 2018 21:28:24 -0700 |
parents | 886e14903c1e |
children | 3995cbe5b00a |
files | src/luan/webserver/Connection.java src/luan/webserver/RequestParser.java |
diffstat | 2 files changed, 14 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/src/luan/webserver/Connection.java Tue Feb 27 01:35:09 2018 -0700 +++ b/src/luan/webserver/Connection.java Tue Feb 27 21:28:24 2018 -0700 @@ -89,7 +89,7 @@ } else if( contentType.startsWith("multipart/form-data;") ) { parser.parseMultipart(); } else { - logger.warn("unknown content type: "+contentType); + logger.warn("unknown request content-type: "+contentType); } } }
--- a/src/luan/webserver/RequestParser.java Tue Feb 27 01:35:09 2018 -0700 +++ b/src/luan/webserver/RequestParser.java Tue Feb 27 21:28:24 2018 -0700 @@ -9,7 +9,7 @@ final class RequestParser { - private static final Logger logger = LoggerFactory.getLogger(Connection.class); + private static final Logger logger = LoggerFactory.getLogger(RequestParser.class); private final Request request; private Parser parser; @@ -19,7 +19,7 @@ void parseUrlencoded() throws ParseException { if( request.body == null ) { - logger.error("body is null\n"+request.rawHead); + logger.warn("body is null\n"+request.rawHead); return; } this.parser = new Parser(Util.toString(request.body)); @@ -74,27 +74,26 @@ } private void parseQuery() throws ParseException { - while(true) { - while( parser.match('&') ); + do { int start = parser.currentIndex(); - if( !queryChar() ) - return; while( queryChar() ); String name = Util.urlDecode( parser.textFrom(start) ); - String value; + String value = null; if( parser.match('=') ) { start = parser.currentIndex(); - while( queryChar() ); + while( queryChar() || parser.match('=') ); value = Util.urlDecode( parser.textFrom(start) ); - } else { - value = ""; } - Util.add(request.parameters,name,value); - } + if( name.length() > 0 || value != null ) { + if( value==null ) + value = ""; + Util.add(request.parameters,name,value); + } + } while( parser.match('&') ); } private boolean queryChar() { - return safePathChar() || parser.anyOf("?\\\""); + return parser.noneOf("=&# \t\n\f\r\u000b"); } // where did I get this? @@ -195,7 +194,7 @@ void parseMultipart() throws ParseException { if( request.body == null ) { - logger.error("body is null\n"+request.rawHead); + logger.warn("body is null\n"+request.rawHead); return; } String contentType = (String)request.headers.get("content-type");