修复HttpRequest.getBody由于URLDecode导致内容多余的BUG

This commit is contained in:
Redkale
2017-03-02 11:52:22 +08:00
parent 525e65d152
commit c5d0582807
2 changed files with 12 additions and 20 deletions

View File

@@ -92,6 +92,7 @@ public class HttpRequest extends Request<HttpContext> {
if (!readLine(buffer, array)) return -1;
Charset charset = this.context.getCharset();
int index = 0;
array.urlDecode();
int offset = array.find(index, ' ');
if (offset <= 0) return -1;
this.method = array.toString(index, offset, charset).trim();
@@ -102,10 +103,10 @@ public class HttpRequest extends Request<HttpContext> {
if (off > 0) offset = off;
int qst = array.find(index, offset, (byte) '?');
if (qst > 0) {
this.requestURI = array.toDecodeString(index, qst - index, charset).trim();
this.requestURI = array.toString(index, qst - index, charset).trim();
addParameter(array, qst + 1, offset - qst - 1);
} else {
this.requestURI = array.toDecodeString(index, offset - index, charset).trim();
this.requestURI = array.toString(index, offset - index, charset).trim();
}
if (this.requestURI.contains("../")) return -1;
index = ++offset;
@@ -174,6 +175,7 @@ public class HttpRequest extends Request<HttpContext> {
private void parseBody() {
if (this.boundary || bodyparsed) return;
array.urlDecode();
addParameter(array, 0, array.size());
bodyparsed = true;
}
@@ -188,10 +190,10 @@ public class HttpRequest extends Request<HttpContext> {
if (valpos > 0) addParameter(array, valpos + 1, limit - valpos - 1);
return;
}
String name = array.toDecodeString(offset, keypos - offset, charset);
String name = array.toString(offset, keypos - offset, charset);
if (name.charAt(0) == '<') return; //内容可能是xml格式; 如: <?xml version="1.0"
++keypos;
String value = array.toDecodeString(keypos, (valpos < 0) ? (limit - keypos) : (valpos - keypos), charset);
String value = array.toString(keypos, (valpos < 0) ? (limit - keypos) : (valpos - keypos), charset);
this.params.addValue(name, value);
if (valpos >= 0) {
addParameter(array, valpos + 1, limit - valpos - 1);

View File

@@ -328,23 +328,19 @@ public final class ByteArray {
}
/**
* 将指定的起始位置和长度按指定字符集并转义后转成字符串
*
* @param offset 起始位置
* @param len 长度
* @param charset 字符集
*
* @return 字符串
* 转义字符串
*/
public String toDecodeString(final int offset, int len, final Charset charset) {
int index = offset;
for (int i = offset; i < (offset + len); i++) {
public void urlDecode() {
int len = this.count;
int index = 0;
for (int i = 0; i < len; i++) {
switch (content[i]) {
case '+':
content[index] = ' ';
break;
case '%':
content[index] = (byte) ((hexBit(content[++i]) * 16 + hexBit(content[++i])));
this.count -= 2;
break;
default:
content[index] = content[i];
@@ -352,12 +348,6 @@ public final class ByteArray {
}
index++;
}
for (int i = index + 1; i < (offset + len); i++) {
content[i] = ' ';
}
len = index - offset;
if (charset == null) return new String(Utility.decodeUTF8(content, offset, len));
return new String(content, offset, len, charset);
}
private static int hexBit(byte b) {