Mercurial Hosting > luan
diff src/luan/webserver/RequestParser.java @ 1212:220228bf1af9
better urlDecode error handling
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 12 Mar 2018 20:33:02 -0600 |
parents | 1e23b913c327 |
children | b99947af8b79 |
line wrap: on
line diff
--- a/src/luan/webserver/RequestParser.java Mon Mar 12 16:32:55 2018 -0600 +++ b/src/luan/webserver/RequestParser.java Mon Mar 12 20:33:02 2018 -0600 @@ -1,5 +1,7 @@ package luan.webserver; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; import java.util.List; import java.util.ArrayList; import org.slf4j.Logger; @@ -70,19 +72,19 @@ if( !parser.match('/') ) throw new ParseException(parser,"bad path"); while( safePathChar() || parser.anyOf("&=") ); - request.path = Util.urlDecode( parser.textFrom(start) ); + request.path = urlDecode( parser.textFrom(start) ); } private void parseQuery() throws ParseException { do { int start = parser.currentIndex(); while( queryChar() ); - String name = Util.urlDecode( parser.textFrom(start) ); + String name = urlDecode( parser.textFrom(start) ); String value = null; if( parser.match('=') ) { start = parser.currentIndex(); while( queryChar() || parser.match('=') ); - value = Util.urlDecode( parser.textFrom(start) ); + value = urlDecode( parser.textFrom(start) ); } if( name.length() > 0 || value != null ) { if( value==null ) @@ -176,11 +178,11 @@ while(true) { int start = parser.currentIndex(); while( parser.noneOf("=;") ); - String name = Util.urlDecode( parser.textFrom(start) ); + String name = urlDecode( parser.textFrom(start) ); if( parser.match('=') ) { start = parser.currentIndex(); while( parser.noneOf(";") ); - String value = Util.urlDecode( parser.textFrom(start) ); + String value = urlDecode( parser.textFrom(start) ); request.cookies.put(name,value); } if( parser.endOfInput() ) @@ -254,4 +256,16 @@ return sb.toString(); } + private String urlDecode(String s) throws ParseException { + try { + return URLDecoder.decode(s,"UTF-8"); + } catch(UnsupportedEncodingException e) { + parser.rollback(); + throw new ParseException(parser,e); + } catch(IllegalArgumentException e) { + parser.rollback(); + throw new ParseException(parser,e); + } + } + }