Skip to content

Commit 9dbd924

Browse files
committed
Bugfix: Trap exceptions in URIParser.
A user was able to crash chat.tinyclouds.org by sending it a malformed URL! Not good.
1 parent 734e86b commit 9dbd924

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

src/http.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,12 @@ node.http.parseUri = function (str) {
6161
uri[o.q.name] = {};
6262
uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
6363
if ($1) {
64-
var key = decode($1);
65-
var val = decode($2);
64+
try {
65+
var key = decode($1);
66+
var val = decode($2);
67+
} catch (e) {
68+
return;
69+
}
6670
uri[o.q.name][key] = val;
6771
}
6872
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
include("mjsunit.js");
2+
3+
// Make sure no exceptions are thrown when receiving malformed HTTP
4+
// requests.
5+
port = 9999;
6+
7+
nrequests_completed = 0;
8+
nrequests_expected = 1;
9+
10+
var s = node.http.createServer(function (req, res) {
11+
puts("req: " + JSON.stringify(req.uri));
12+
13+
res.sendHeader(200, {"Content-Type": "text/plain"});
14+
res.sendBody("Hello World");
15+
res.finish();
16+
17+
if (++nrequests_completed == nrequests_expected) s.close();
18+
});
19+
s.listen(port);
20+
21+
var c = node.tcp.createConnection(port);
22+
c.addListener("connect", function () {
23+
c.send("GET /hello?foo=%99bar HTTP/1.1\r\n\r\n");
24+
c.close();
25+
});
26+
27+
// TODO add more!
28+
29+
process.addListener("exit", function () {
30+
assertEquals(nrequests_expected, nrequests_completed);
31+
});

0 commit comments

Comments
 (0)