Skip to content

Commit 10c92c4

Browse files
committed
throw exception on binary req
1 parent 2192458 commit 10c92c4

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

server/server.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ void split(string str, string separator, int max, vector<string> &results) {
6161
results.push_back(str);
6262
}
6363

64-
Request *parseRawReq(char *headersRaw) {
64+
Request *parseRawReq(char *headersRaw, size_t length) {
6565
Request *req;
6666
string boundary;
6767
string lastFieldKey;
@@ -71,6 +71,10 @@ Request *parseRawReq(char *headersRaw) {
7171
enum State { REQ, HEADER, BODY, BODY_HEADER, BODY_BODY };
7272
State state = REQ;
7373
vector<string> headers = split(string(headersRaw), "\r\n", false);
74+
for (size_t i = 0; i < length; i++) {
75+
if (!headersRaw[i])
76+
throw Server::Exception("Unsupported binary data in request.");
77+
}
7478
size_t realBodySize =
7579
string(headersRaw).size() -
7680
split(string(headersRaw), "\r\n\r\n", false)[0].size() -
@@ -253,7 +257,7 @@ void Server::run() {
253257
if (recv_len > 0) {
254258
recv_total_len += recv_len;
255259
data[recv_total_len >= 0 ? recv_total_len : 0] = 0;
256-
req = parseRawReq(data);
260+
req = parseRawReq(data, recv_total_len);
257261
} else
258262
break;
259263
}

0 commit comments

Comments
 (0)