http: better querystring parsing.

This commit is contained in:
Christopher Jeffrey 2016-10-05 04:23:26 -07:00
parent ac483eaedd
commit c3ff43c85b
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD

View File

@ -10,6 +10,7 @@
var AsyncObject = require('../utils/async');
var utils = require('../utils/utils');
var assert = require('assert');
var url = require('url');
/**
* HTTPBase
@ -92,12 +93,12 @@ HTTPBase.prototype._initRouter = function _initRouter() {
function done(err) {
if (err) {
send(res, 400, { error: err.message + '' });
send(res, err.statusCode || 400, { error: err.message + '' });
try {
req.destroy();
req.socket.destroy();
} catch (e) {
self.emit('error', e);
;
}
self.emit('error', err);
}
@ -512,35 +513,40 @@ function parseBody(req, callback) {
});
}
function parsePairs(str, del, eq) {
var out, s, i, parts;
function parsePairs(str) {
var parts = str.split('&');
var data = {};
var i, index, pair, key, value;
if (!str)
return {};
for (i = 0; i < parts.length; i++) {
pair = parts[i];
index = pair.indexOf('=');
if (!del)
del = '&';
if (!eq)
eq = '=';
out = {};
s = str.split(del);
for (i = 0; i < s.length; i++) {
parts = s[i].split(eq);
if (parts[0]) {
parts[0] = unescape(parts[0]);
parts[1] = parts[1] ? unescape(parts[1]) : '';
out[parts[0]] = parts[1];
if (index === -1) {
key = pair;
value = '';
} else {
key = pair.substring(0, index);
value = pair.substring(index + 1);
}
key = unescape(key);
if (key.length === 0)
continue;
value = unescape(value);
if (value.length === 0)
continue;
data[key] = value;
}
return out;
return data;
}
function parsePath(req) {
var url = require('url');
var uri = url.parse(req.url);
var pathname = uri.pathname || '/';