Skip to content

Commit e1635a7

Browse files
robertsipkayichoi
authored andcommitted
Add a more secure type validator to TCP (#977)
IoT.js-DCO-1.0-Signed-off-by: Robert Sipka [email protected]
1 parent f19e0ea commit e1635a7

File tree

1 file changed

+14
-34
lines changed

1 file changed

+14
-34
lines changed

src/modules/iotjs_module_tcp.c

Lines changed: 14 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@
2222
#include "iotjs_reqwrap.h"
2323

2424

25-
static void iotjs_tcpwrap_destroy(iotjs_tcpwrap_t* tcpwrap);
26-
IOTJS_DEFINE_NATIVE_HANDLE_INFO(tcpwrap);
25+
IOTJS_DEFINE_NATIVE_HANDLE_INFO_THIS_MODULE(tcpwrap);
2726

2827

2928
iotjs_tcpwrap_t* iotjs_tcpwrap_create(const iotjs_jval_t* jtcp) {
@@ -32,7 +31,7 @@ iotjs_tcpwrap_t* iotjs_tcpwrap_create(const iotjs_jval_t* jtcp) {
3231

3332
iotjs_handlewrap_initialize(&_this->handlewrap, jtcp,
3433
(uv_handle_t*)(&_this->handle),
35-
&tcpwrap_native_info);
34+
&this_module_native_info);
3635

3736
const iotjs_environment_t* env = iotjs_environment_get();
3837
uv_tcp_init(iotjs_environment_loop(env), &_this->handle);
@@ -242,12 +241,9 @@ void AfterClose(uv_handle_t* handle) {
242241

243242
// Close socket
244243
JHANDLER_FUNCTION(Close) {
245-
DJHANDLER_CHECK_THIS(object);
244+
JHANDLER_DECLARE_THIS_PTR(handlewrap, wrap);
246245
DJHANDLER_CHECK_ARGS(0);
247246

248-
const iotjs_jval_t* jtcp = JHANDLER_GET_THIS(object);
249-
iotjs_handlewrap_t* wrap = iotjs_handlewrap_from_jobject(jtcp);
250-
251247
// close uv handle, `AfterClose` will be called after socket closed.
252248
iotjs_handlewrap_close(wrap, AfterClose);
253249
}
@@ -258,18 +254,17 @@ JHANDLER_FUNCTION(Close) {
258254
// [0] address
259255
// [1] port
260256
JHANDLER_FUNCTION(Bind) {
261-
DJHANDLER_CHECK_THIS(object);
257+
JHANDLER_DECLARE_THIS_PTR(tcpwrap, tcp_wrap);
258+
262259
DJHANDLER_CHECK_ARGS(2, string, number);
263260

264-
const iotjs_jval_t* jtcp = JHANDLER_GET_THIS(object);
265261
iotjs_string_t address = JHANDLER_GET_ARG(0, string);
266262
int port = JHANDLER_GET_ARG(1, number);
267263

268264
sockaddr_in addr;
269265
int err = uv_ip4_addr(iotjs_string_data(&address), port, &addr);
270266

271267
if (err == 0) {
272-
iotjs_tcpwrap_t* tcp_wrap = iotjs_tcpwrap_from_jobject(jtcp);
273268
err = uv_tcp_bind(iotjs_tcpwrap_tcp_handle(tcp_wrap),
274269
(const sockaddr*)(&addr), 0);
275270
}
@@ -310,10 +305,10 @@ static void AfterConnect(uv_connect_t* req, int status) {
310305
// [1] port
311306
// [2] callback
312307
JHANDLER_FUNCTION(Connect) {
313-
DJHANDLER_CHECK_THIS(object);
308+
JHANDLER_DECLARE_THIS_PTR(tcpwrap, tcp_wrap);
309+
314310
DJHANDLER_CHECK_ARGS(3, string, number, function);
315311

316-
const iotjs_jval_t* jtcp = JHANDLER_GET_THIS(object);
317312
iotjs_string_t address = JHANDLER_GET_ARG(0, string);
318313
int port = JHANDLER_GET_ARG(1, number);
319314
const iotjs_jval_t* jcallback = JHANDLER_GET_ARG(2, function);
@@ -322,9 +317,6 @@ JHANDLER_FUNCTION(Connect) {
322317
int err = uv_ip4_addr(iotjs_string_data(&address), port, &addr);
323318

324319
if (err == 0) {
325-
// Get tcp wrapper from javascript socket object.
326-
iotjs_tcpwrap_t* tcp_wrap = iotjs_tcpwrap_from_jobject(jtcp);
327-
328320
// Create connection request wrapper.
329321
iotjs_connect_reqwrap_t* req_wrap = iotjs_connect_reqwrap_create(jcallback);
330322

@@ -401,12 +393,9 @@ static void OnConnection(uv_stream_t* handle, int status) {
401393

402394

403395
JHANDLER_FUNCTION(Listen) {
404-
DJHANDLER_CHECK_THIS(object);
396+
JHANDLER_DECLARE_THIS_PTR(tcpwrap, tcp_wrap);
405397
DJHANDLER_CHECK_ARGS(1, number);
406398

407-
const iotjs_jval_t* jtcp = JHANDLER_GET_THIS(object);
408-
iotjs_tcpwrap_t* tcp_wrap = iotjs_tcpwrap_from_jobject(jtcp);
409-
410399
int backlog = JHANDLER_GET_ARG(0, number);
411400

412401
int err = uv_listen((uv_stream_t*)(iotjs_tcpwrap_tcp_handle(tcp_wrap)),
@@ -441,12 +430,9 @@ void AfterWrite(uv_write_t* req, int status) {
441430

442431

443432
JHANDLER_FUNCTION(Write) {
444-
DJHANDLER_CHECK_THIS(object);
433+
JHANDLER_DECLARE_THIS_PTR(tcpwrap, tcp_wrap);
445434
DJHANDLER_CHECK_ARGS(2, object, function);
446435

447-
const iotjs_jval_t* jtcp = JHANDLER_GET_THIS(object);
448-
iotjs_tcpwrap_t* tcp_wrap = iotjs_tcpwrap_from_jobject(jtcp);
449-
450436
const iotjs_jval_t* jbuffer = JHANDLER_GET_ARG(0, object);
451437
iotjs_bufferwrap_t* buffer_wrap = iotjs_bufferwrap_from_jbuffer(jbuffer);
452438
char* buffer = iotjs_bufferwrap_buffer(buffer_wrap);
@@ -533,10 +519,7 @@ void OnRead(uv_stream_t* handle, ssize_t nread, const uv_buf_t* buf) {
533519

534520

535521
JHANDLER_FUNCTION(ReadStart) {
536-
DJHANDLER_CHECK_THIS(object);
537-
538-
const iotjs_jval_t* jtcp = JHANDLER_GET_THIS(object);
539-
iotjs_tcpwrap_t* tcp_wrap = iotjs_tcpwrap_from_jobject(jtcp);
522+
JHANDLER_DECLARE_THIS_PTR(tcpwrap, tcp_wrap);
540523

541524
int err = uv_read_start((uv_stream_t*)(iotjs_tcpwrap_tcp_handle(tcp_wrap)),
542525
OnAlloc, OnRead);
@@ -567,11 +550,9 @@ static void AfterShutdown(uv_shutdown_t* req, int status) {
567550

568551

569552
JHANDLER_FUNCTION(Shutdown) {
570-
DJHANDLER_CHECK_THIS(object);
571-
DJHANDLER_CHECK_ARGS(1, function);
553+
JHANDLER_DECLARE_THIS_PTR(tcpwrap, tcp_wrap);
572554

573-
const iotjs_jval_t* jtcp = JHANDLER_GET_THIS(object);
574-
iotjs_tcpwrap_t* tcp_wrap = iotjs_tcpwrap_from_jobject(jtcp);
555+
DJHANDLER_CHECK_ARGS(1, function);
575556

576557
const iotjs_jval_t* arg0 = JHANDLER_GET_ARG(0, object);
577558
iotjs_shutdown_reqwrap_t* req_wrap = iotjs_shutdown_reqwrap_create(arg0);
@@ -592,14 +573,13 @@ JHANDLER_FUNCTION(Shutdown) {
592573
// [0] enable
593574
// [1] delay
594575
JHANDLER_FUNCTION(SetKeepAlive) {
595-
DJHANDLER_CHECK_THIS(object);
576+
JHANDLER_DECLARE_THIS_PTR(tcpwrap, tcp_wrap);
577+
596578
DJHANDLER_CHECK_ARGS(2, number, number);
597579

598-
const iotjs_jval_t* jtcp = JHANDLER_GET_THIS(object);
599580
int enable = JHANDLER_GET_ARG(0, number);
600581
unsigned delay = JHANDLER_GET_ARG(1, number);
601582

602-
iotjs_tcpwrap_t* tcp_wrap = iotjs_tcpwrap_from_jobject(jtcp);
603583
int err = uv_tcp_keepalive(iotjs_tcpwrap_tcp_handle(tcp_wrap), enable, delay);
604584

605585
iotjs_jhandler_return_number(jhandler, err);

0 commit comments

Comments
 (0)