@@ -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