comparison src/luan/webserver/RequestParser.java @ 1221:b99947af8b79

better path parsing
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 25 Mar 2018 17:13:11 -0600
parents 220228bf1af9
children 275d1b52dbce
comparison
equal deleted inserted replaced
1220:4721c482c86b 1221:b99947af8b79
69 69
70 private void parsePath() throws ParseException { 70 private void parsePath() throws ParseException {
71 int start = parser.currentIndex(); 71 int start = parser.currentIndex();
72 if( !parser.match('/') ) 72 if( !parser.match('/') )
73 throw new ParseException(parser,"bad path"); 73 throw new ParseException(parser,"bad path");
74 while( safePathChar() || parser.anyOf("&=") ); 74 while( parser.noneOf(" ?#") );
75 request.path = urlDecode( parser.textFrom(start) ); 75 request.path = urlDecode( parser.textFrom(start) );
76 } 76 }
77 77
78 private void parseQuery() throws ParseException { 78 private void parseQuery() throws ParseException {
79 do { 79 do {
94 } while( parser.match('&') ); 94 } while( parser.match('&') );
95 } 95 }
96 96
97 private boolean queryChar() { 97 private boolean queryChar() {
98 return parser.noneOf("=&# \t\n\f\r\u000b"); 98 return parser.noneOf("=&# \t\n\f\r\u000b");
99 }
100
101 // where did I get this?
102 private boolean safePathChar() {
103 return parser.inCharRange('A','Z')
104 || parser.inCharRange('a','z')
105 || parser.inCharRange('0','9')
106 || parser.anyOf("-._~:/[]@!$'()*+,;`.%")
107 ;
108 } 99 }
109 100
110 private void parseProtocol() throws ParseException { 101 private void parseProtocol() throws ParseException {
111 int start = parser.currentIndex(); 102 int start = parser.currentIndex();
112 if( !( 103 if( !(