Skip to content

Commit e55765d

Browse files
committed
fun with http_parser
1 parent 7b8058a commit e55765d

File tree

4 files changed

+15
-7
lines changed

4 files changed

+15
-7
lines changed

deps/http_parser/http_parser.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ do { \
150150
#define COUNT_HEADER_SIZE(V) \
151151
do { \
152152
parser->nread += (V); \
153-
if (UNLIKELY(parser->nread > (HTTP_MAX_HEADER_SIZE))) { \
153+
if (UNLIKELY(parser->nread > parser->max_header_size)) { \
154154
SET_ERRNO(HPE_HEADER_OVERFLOW); \
155155
goto error; \
156156
} \
@@ -2105,6 +2105,7 @@ http_parser_init (http_parser *parser, enum http_parser_type t)
21052105
parser->type = t;
21062106
parser->state = (t == HTTP_REQUEST ? s_start_req : (t == HTTP_RESPONSE ? s_start_res : s_start_req_or_res));
21072107
parser->http_errno = HPE_OK;
2108+
parser->max_header_size = HTTP_MAX_HEADER_SIZE;
21082109
}
21092110

21102111
void

deps/http_parser/http_parser.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,8 @@ struct http_parser {
318318

319319
/** PUBLIC **/
320320
void *data; /* A pointer to get hook to the "connection" or "socket" object */
321+
322+
uint32_t max_header_size;
321323
};
322324

323325

lib/_http_common.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ function parserOnMessageComplete() {
149149

150150

151151
const parsers = new FreeList('parsers', 1000, function parsersCb() {
152-
const parser = new HTTPParser(HTTPParser.REQUEST);
152+
const parser = new HTTPParser(HTTPParser.REQUEST, 1024);
153153

154154
cleanParser(parser);
155155

src/node_http_parser.cc

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,12 @@ struct StringPtr {
150150

151151
class Parser : public AsyncWrap, public StreamListener {
152152
public:
153-
Parser(Environment* env, Local<Object> wrap, parser_type_t type)
153+
Parser(Environment* env, Local<Object> wrap, parser_type_t type,
154+
uint32_t max_header_size)
154155
: AsyncWrap(env, wrap, AsyncWrap::PROVIDER_HTTPPARSER),
155156
current_buffer_len_(0),
156157
current_buffer_data_(nullptr) {
157-
Init(type);
158+
Init(type, max_header_size);
158159
}
159160

160161

@@ -423,7 +424,9 @@ class Parser : public AsyncWrap, public StreamListener {
423424
parser_type_t type =
424425
static_cast<parser_type_t>(args[0].As<Int32>()->Value());
425426
CHECK(type == HTTP_REQUEST || type == HTTP_RESPONSE);
426-
new Parser(env, args.This(), type);
427+
uint32_t max_header_size = args[1]->IsUint32() ?
428+
args[1].As<Uint32>()->Value(): 0;
429+
new Parser(env, args.This(), type, max_header_size);
427430
}
428431

429432

@@ -515,7 +518,7 @@ class Parser : public AsyncWrap, public StreamListener {
515518
if (isReused) {
516519
parser->AsyncReset();
517520
}
518-
parser->Init(type);
521+
parser->Init(type, 1024);
519522
}
520523

521524

@@ -781,12 +784,14 @@ class Parser : public AsyncWrap, public StreamListener {
781784
}
782785

783786

784-
void Init(parser_type_t type) {
787+
void Init(parser_type_t type, uint32_t max_header_size) {
785788
#ifdef NODE_EXPERIMENTAL_HTTP
786789
llhttp_init(&parser_, type, &settings);
787790
header_nread_ = 0;
788791
#else /* !NODE_EXPERIMENTAL_HTTP */
789792
http_parser_init(&parser_, type);
793+
parser_.max_header_size = max_header_size;
794+
printf("max_header_size is %d %d\n", max_header_size, parser_.max_header_size);
790795
#endif /* NODE_EXPERIMENTAL_HTTP */
791796
url_.Reset();
792797
status_message_.Reset();

0 commit comments

Comments
 (0)