Skip to content

Commit 01a2bdf

Browse files
leonardo-albertovichedsiper
authored andcommitted
http_server_http1: updated the request size measurement function
Signed-off-by: Leonardo Alminana <[email protected]>
1 parent 4c68c2b commit 01a2bdf

File tree

1 file changed

+16
-40
lines changed

1 file changed

+16
-40
lines changed

src/http_server/flb_http_server_http1.c

+16-40
Original file line numberDiff line numberDiff line change
@@ -69,16 +69,10 @@ static void dummy_mk_http_request_init(struct mk_http_session *session,
6969

7070
static int http1_evict_request(struct flb_http1_server_session *session)
7171
{
72-
uintptr_t session_buffer_upper_bound;
73-
uintptr_t session_buffer_lower_bound;
7472
size_t session_buffer_length;
7573
cfl_sds_t session_buffer;
76-
size_t content_length;
7774
size_t request_length;
78-
uintptr_t request_end;
7975

80-
request_end = 0;
81-
content_length = 0;
8276
session_buffer = session->parent->incoming_data;
8377

8478
if (session_buffer == NULL) {
@@ -87,46 +81,28 @@ static int http1_evict_request(struct flb_http1_server_session *session)
8781

8882
session_buffer_length = cfl_sds_len(session_buffer);
8983

90-
if (session->inner_request.data.data != NULL) {
91-
content_length = session->inner_request.data.len;
84+
request_length = mk_http_parser_request_size(&session->inner_parser,
85+
session_buffer,
86+
session_buffer_length);
9287

93-
request_end = (uintptr_t) session->inner_request.data.data;
94-
request_end += content_length;
95-
}
96-
else {
97-
request_end = (uintptr_t) strstr(session_buffer,
98-
"\r\n\r\n");
88+
if (request_length == -1 ||
89+
request_length > session_buffer_length) {
90+
cfl_sds_set_len(session_buffer, 0);
9991

100-
if(request_end != 0) {
101-
request_end += 4;
102-
}
92+
return -1;
10393
}
10494

105-
if (request_end != 0) {
106-
session_buffer_lower_bound = (uintptr_t) session_buffer;
107-
session_buffer_upper_bound = (uintptr_t) &session_buffer[session_buffer_length];
108-
109-
if (request_end < session_buffer_lower_bound ||
110-
request_end > session_buffer_upper_bound) {
111-
return -1;
112-
}
113-
114-
request_length = (size_t) (request_end - session_buffer_lower_bound);
115-
116-
if (request_length == session_buffer_length) {
117-
session_buffer_length = 0;
118-
}
119-
else {
120-
session_buffer_length -= request_length;
95+
if ((session_buffer_length - request_length) > 0) {
96+
session_buffer_length -= request_length;
12197

122-
memmove(session_buffer,
123-
&session_buffer[request_length],
124-
session_buffer_length);
98+
memmove(session_buffer,
99+
&session_buffer[request_length],
100+
session_buffer_length);
125101

126-
session_buffer[session_buffer_length] = '\0';
127-
}
128-
129-
cfl_sds_set_len(session_buffer, session_buffer_length);
102+
session_buffer[session_buffer_length] = '\0';
103+
}
104+
else {
105+
cfl_sds_set_len(session_buffer, 0);
130106
}
131107

132108
return 0;

0 commit comments

Comments
 (0)