Skip to content

Commit 37db06d

Browse files
LaszloLangoyichoi
authored andcommitted
Add a more secure type validator to HTTPParser based on #911 (#975)
Related issue: #816 IoT.js-DCO-1.0-Signed-off-by: László Langó [email protected]
1 parent de4337a commit 37db06d

File tree

1 file changed

+9
-29
lines changed

1 file changed

+9
-29
lines changed

src/modules/iotjs_module_httpparser.c

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@
2525
#define THIS iotjs_httpparserwrap_t* httpparserwrap
2626

2727

28-
static void iotjs_httpparserwrap_destroy(THIS);
29-
IOTJS_DEFINE_NATIVE_HANDLE_INFO(httpparserwrap);
28+
IOTJS_DEFINE_NATIVE_HANDLE_INFO_THIS_MODULE(httpparserwrap);
3029

3130

3231
iotjs_httpparserwrap_t* iotjs_httpparserwrap_create(const iotjs_jval_t* jparser,
@@ -35,7 +34,7 @@ iotjs_httpparserwrap_t* iotjs_httpparserwrap_create(const iotjs_jval_t* jparser,
3534
IOTJS_VALIDATED_STRUCT_CONSTRUCTOR(iotjs_httpparserwrap_t, httpparserwrap);
3635

3736
iotjs_jobjectwrap_initialize(&_this->jobjectwrap, jparser,
38-
&httpparserwrap_native_info);
37+
&this_module_native_info);
3938

4039
_this->url = iotjs_string_create();
4140
_this->status_msg = iotjs_string_create();
@@ -350,35 +349,23 @@ const struct http_parser_settings settings = {
350349
};
351350

352351

353-
static iotjs_httpparserwrap_t* get_parser_wrap(const iotjs_jval_t* jparser) {
354-
uintptr_t handle = iotjs_jval_get_object_native_handle(jparser);
355-
return (iotjs_httpparserwrap_t*)(handle);
356-
}
357-
358-
359352
JHANDLER_FUNCTION(Reinitialize) {
360-
DJHANDLER_CHECK_THIS(object);
353+
JHANDLER_DECLARE_THIS_PTR(httpparserwrap, parser);
361354
DJHANDLER_CHECK_ARGS(1, number);
362355

363-
const iotjs_jval_t* jparser = JHANDLER_GET_THIS(object);
364-
365356
http_parser_type httpparser_type =
366357
(http_parser_type)(JHANDLER_GET_ARG(0, number));
367358
IOTJS_ASSERT(httpparser_type == HTTP_REQUEST ||
368359
httpparser_type == HTTP_RESPONSE);
369360

370-
iotjs_httpparserwrap_t* parser = get_parser_wrap(jparser);
371361
iotjs_httpparserwrap_initialize(parser, httpparser_type);
372362
}
373363

374364

375365
JHANDLER_FUNCTION(Finish) {
376-
DJHANDLER_CHECK_THIS(object);
366+
JHANDLER_DECLARE_THIS_PTR(httpparserwrap, parser);
377367
DJHANDLER_CHECK_ARGS(0);
378368

379-
const iotjs_jval_t* jparser = JHANDLER_GET_THIS(object);
380-
iotjs_httpparserwrap_t* parser = get_parser_wrap(jparser);
381-
382369
http_parser* nativeparser = iotjs_httpparserwrap_parser(parser);
383370
size_t rv = http_parser_execute(nativeparser, &settings, NULL, 0);
384371

@@ -396,13 +383,9 @@ JHANDLER_FUNCTION(Finish) {
396383

397384

398385
JHANDLER_FUNCTION(Execute) {
399-
DJHANDLER_CHECK_THIS(object);
386+
JHANDLER_DECLARE_THIS_PTR(httpparserwrap, parser);
400387
DJHANDLER_CHECK_ARGS(1, object);
401388

402-
const iotjs_jval_t* jparser = JHANDLER_GET_THIS(object);
403-
iotjs_httpparserwrap_t* parser = get_parser_wrap(jparser);
404-
405-
406389
const iotjs_jval_t* jbuffer = JHANDLER_GET_ARG(0, object);
407390
iotjs_bufferwrap_t* buffer_wrap = iotjs_bufferwrap_from_jbuffer(jbuffer);
408391
char* buf_data = iotjs_bufferwrap_buffer(buffer_wrap);
@@ -436,20 +419,18 @@ JHANDLER_FUNCTION(Execute) {
436419

437420

438421
JHANDLER_FUNCTION(Pause) {
439-
DJHANDLER_CHECK_THIS(object);
422+
JHANDLER_DECLARE_THIS_PTR(httpparserwrap, parser);
440423
DJHANDLER_CHECK_ARGS(0);
441-
const iotjs_jval_t* jparser = JHANDLER_GET_THIS(object);
442-
iotjs_httpparserwrap_t* parser = get_parser_wrap(jparser);
424+
443425
http_parser* nativeparser = iotjs_httpparserwrap_parser(parser);
444426
http_parser_pause(nativeparser, 1);
445427
}
446428

447429

448430
JHANDLER_FUNCTION(Resume) {
449-
DJHANDLER_CHECK_THIS(object);
431+
JHANDLER_DECLARE_THIS_PTR(httpparserwrap, parser);
450432
DJHANDLER_CHECK_ARGS(0);
451-
const iotjs_jval_t* jparser = JHANDLER_GET_THIS(object);
452-
iotjs_httpparserwrap_t* parser = get_parser_wrap(jparser);
433+
453434
http_parser* nativeparser = iotjs_httpparserwrap_parser(parser);
454435
http_parser_pause(nativeparser, 0);
455436
}
@@ -468,7 +449,6 @@ JHANDLER_FUNCTION(HTTPParserCons) {
468449
iotjs_httpparserwrap_t* parser =
469450
iotjs_httpparserwrap_create(jparser, httpparser_type);
470451
IOTJS_ASSERT(iotjs_jval_is_object(iotjs_httpparserwrap_jobject(parser)));
471-
IOTJS_ASSERT(get_parser_wrap(jparser) == parser);
472452
}
473453

474454

0 commit comments

Comments
 (0)