Skip to content

Commit 710e830

Browse files
committed
http: splitting the limit check of header and uri
1 parent 78dfcf7 commit 710e830

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

src/node_http_parser_impl.h

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ class Parser : public AsyncWrap, public StreamListener {
180180

181181

182182
int on_url(const char* at, size_t length) {
183-
int rv = TrackHeader(length, kBeforeHeaders);
183+
int rv = TrackURI(length);
184184
if (rv != 0) {
185185
return rv;
186186
}
@@ -251,6 +251,7 @@ class Parser : public AsyncWrap, public StreamListener {
251251

252252
int on_headers_complete() {
253253
#ifdef NODE_EXPERIMENTAL_HTTP
254+
uri_nread_ = 0;
254255
header_nread_ = 0;
255256
#endif /* NODE_EXPERIMENTAL_HTTP */
256257

@@ -813,6 +814,7 @@ class Parser : public AsyncWrap, public StreamListener {
813814
void Init(parser_type_t type) {
814815
#ifdef NODE_EXPERIMENTAL_HTTP
815816
llhttp_init(&parser_, type, &settings);
817+
uri_nread_ = 0;
816818
header_nread_ = 0;
817819
#else /* !NODE_EXPERIMENTAL_HTTP */
818820
http_parser_init(&parser_, type);
@@ -825,21 +827,22 @@ class Parser : public AsyncWrap, public StreamListener {
825827
got_exception_ = false;
826828
}
827829

828-
enum HeaderTrackState {
829-
kBeforeHeaders,
830-
kAfterRequestLine
831-
};
832-
833-
int TrackHeader(size_t len, enum HeaderTrackState pos = kAfterRequestLine) {
830+
int TrackURI(size_t len) {
834831
#ifdef NODE_EXPERIMENTAL_HTTP
835-
header_nread_ += len;
836-
if (pos == kBeforeHeaders &&
837-
header_nread_ >= per_process::cli_options->max_http_uri_size) {
832+
uri_nread_ += len;
833+
if (uri_nread_ >= per_process::cli_options->max_http_uri_size) {
838834
llhttp_set_error_reason(&parser_,
839835
"HPE_URI_OVERFLOW:URI overflow");
840836
return HPE_USER;
841-
} else if (pos == kAfterRequestLine &&
842-
header_nread_ >= per_process::cli_options->max_http_header_size) {
837+
}
838+
#endif /* NODE_EXPERIMENTAL_HTTP */
839+
return 0;
840+
}
841+
842+
int TrackHeader(size_t len) {
843+
#ifdef NODE_EXPERIMENTAL_HTTP
844+
header_nread_ += len;
845+
if (header_nread_ >= per_process::cli_options->max_http_header_size) {
843846
llhttp_set_error_reason(&parser_, "HPE_HEADER_OVERFLOW:Header overflow");
844847
return HPE_USER;
845848
}
@@ -879,6 +882,7 @@ class Parser : public AsyncWrap, public StreamListener {
879882
#ifdef NODE_EXPERIMENTAL_HTTP
880883
unsigned int execute_depth_ = 0;
881884
bool pending_pause_ = false;
885+
uint64_t uri_nread_ = 0;
882886
uint64_t header_nread_ = 0;
883887
#endif /* NODE_EXPERIMENTAL_HTTP */
884888

0 commit comments

Comments
 (0)