From 10c92c49bac0214c47c7b0cd705fcaae2afeff4c Mon Sep 17 00:00:00 2001 From: "h@di" Date: Fri, 11 Jan 2019 18:12:52 +0330 Subject: [PATCH] throw exception on binary req --- server/server.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/server/server.cpp b/server/server.cpp index ee54fdc..3330ade 100644 --- a/server/server.cpp +++ b/server/server.cpp @@ -61,7 +61,7 @@ void split(string str, string separator, int max, vector &results) { results.push_back(str); } -Request *parseRawReq(char *headersRaw) { +Request *parseRawReq(char *headersRaw, size_t length) { Request *req; string boundary; string lastFieldKey; @@ -71,6 +71,10 @@ Request *parseRawReq(char *headersRaw) { enum State { REQ, HEADER, BODY, BODY_HEADER, BODY_BODY }; State state = REQ; vector headers = split(string(headersRaw), "\r\n", false); + for (size_t i = 0; i < length; i++) { + if (!headersRaw[i]) + throw Server::Exception("Unsupported binary data in request."); + } size_t realBodySize = string(headersRaw).size() - split(string(headersRaw), "\r\n\r\n", false)[0].size() - @@ -253,7 +257,7 @@ void Server::run() { if (recv_len > 0) { recv_total_len += recv_len; data[recv_total_len >= 0 ? recv_total_len : 0] = 0; - req = parseRawReq(data); + req = parseRawReq(data, recv_total_len); } else break; }