Skip to content

Commit 2cee4f5

Browse files
knightburtonyichoi
authored andcommitted
Add a more secure type validator to UDP module based on #911 (#979)
IoT.js-DCO-1.0-Signed-off-by: Imre Kiss [email protected]
1 parent 4dc88de commit 2cee4f5

File tree

1 file changed

+16
-44
lines changed

1 file changed

+16
-44
lines changed

src/modules/iotjs_module_udp.c

Lines changed: 16 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@
2323
#include "iotjs_reqwrap.h"
2424

2525

26-
static void iotjs_udpwrap_destroy(iotjs_udpwrap_t* udpwrap);
27-
IOTJS_DEFINE_NATIVE_HANDLE_INFO(udpwrap);
26+
IOTJS_DEFINE_NATIVE_HANDLE_INFO_THIS_MODULE(udpwrap);
2827

2928

3029
iotjs_udpwrap_t* iotjs_udpwrap_create(const iotjs_jval_t* judp) {
@@ -33,7 +32,7 @@ iotjs_udpwrap_t* iotjs_udpwrap_create(const iotjs_jval_t* judp) {
3332

3433
iotjs_handlewrap_initialize(&_this->handlewrap, judp,
3534
(uv_handle_t*)(&_this->handle),
36-
&udpwrap_native_info);
35+
&this_module_native_info);
3736

3837
const iotjs_environment_t* env = iotjs_environment_get();
3938
uv_udp_init(iotjs_environment_loop(env), &_this->handle);
@@ -58,12 +57,6 @@ iotjs_udpwrap_t* iotjs_udpwrap_from_handle(uv_udp_t* udp_handle) {
5857
}
5958

6059

61-
iotjs_udpwrap_t* iotjs_udpwrap_from_jobject(const iotjs_jval_t* judp) {
62-
iotjs_handlewrap_t* handlewrap = iotjs_handlewrap_from_jobject(judp);
63-
return (iotjs_udpwrap_t*)handlewrap;
64-
}
65-
66-
6760
uv_udp_t* iotjs_udpwrap_udp_handle(iotjs_udpwrap_t* udpwrap) {
6861
IOTJS_VALIDATED_STRUCT_METHOD(iotjs_udpwrap_t, udpwrap);
6962
uv_handle_t* handle = iotjs_handlewrap_get_uv_handle(&_this->handlewrap);
@@ -135,12 +128,9 @@ JHANDLER_FUNCTION(UDP) {
135128

136129

137130
JHANDLER_FUNCTION(Bind) {
138-
DJHANDLER_CHECK_THIS(object);
131+
JHANDLER_DECLARE_THIS_PTR(udpwrap, udp_wrap);
139132
DJHANDLER_CHECK_ARGS(2, string, number);
140133

141-
const iotjs_jval_t* judp = JHANDLER_GET_THIS(object);
142-
iotjs_udpwrap_t* udp_wrap = iotjs_udpwrap_from_jobject(judp);
143-
144134
iotjs_string_t address = JHANDLER_GET_ARG(0, string);
145135
const int port = JHANDLER_GET_ARG(1, number);
146136
const iotjs_jval_t* this_obj = JHANDLER_GET_THIS(object);
@@ -234,12 +224,9 @@ static void OnRecv(uv_udp_t* handle, ssize_t nread, const uv_buf_t* buf,
234224

235225

236226
JHANDLER_FUNCTION(RecvStart) {
237-
DJHANDLER_CHECK_THIS(object);
227+
JHANDLER_DECLARE_THIS_PTR(udpwrap, udp_wrap);
238228
DJHANDLER_CHECK_ARGS(0);
239229

240-
const iotjs_jval_t* judp = JHANDLER_GET_THIS(object);
241-
iotjs_udpwrap_t* udp_wrap = iotjs_udpwrap_from_jobject(judp);
242-
243230
int err =
244231
uv_udp_recv_start(iotjs_udpwrap_udp_handle(udp_wrap), OnAlloc, OnRecv);
245232

@@ -252,12 +239,9 @@ JHANDLER_FUNCTION(RecvStart) {
252239

253240

254241
JHANDLER_FUNCTION(RecvStop) {
255-
DJHANDLER_CHECK_THIS(object);
242+
JHANDLER_DECLARE_THIS_PTR(udpwrap, udp_wrap);
256243
DJHANDLER_CHECK_ARGS(0);
257244

258-
const iotjs_jval_t* judp = JHANDLER_GET_THIS(object);
259-
iotjs_udpwrap_t* udp_wrap = iotjs_udpwrap_from_jobject(judp);
260-
261245
int r = uv_udp_recv_stop(iotjs_udpwrap_udp_handle(udp_wrap));
262246

263247
iotjs_jhandler_return_number(jhandler, r);
@@ -292,14 +276,11 @@ static void OnSend(uv_udp_send_t* req, int status) {
292276
// [2] ip
293277
// [3] callback function
294278
JHANDLER_FUNCTION(Send) {
295-
DJHANDLER_CHECK_THIS(object);
279+
JHANDLER_DECLARE_THIS_PTR(udpwrap, udp_wrap);
296280
DJHANDLER_CHECK_ARGS(3, object, number, string);
297281
IOTJS_ASSERT(iotjs_jval_is_function(iotjs_jhandler_get_arg(jhandler, 3)) ||
298282
iotjs_jval_is_undefined(iotjs_jhandler_get_arg(jhandler, 3)));
299283

300-
const iotjs_jval_t* judp = JHANDLER_GET_THIS(object);
301-
iotjs_udpwrap_t* udp_wrap = iotjs_udpwrap_from_jobject(judp);
302-
303284
const iotjs_jval_t* jbuffer = JHANDLER_GET_ARG(0, object);
304285
const unsigned short port = JHANDLER_GET_ARG(1, number);
305286
iotjs_string_t address = JHANDLER_GET_ARG(2, string);
@@ -337,13 +318,10 @@ JHANDLER_FUNCTION(Send) {
337318

338319
// Close socket
339320
JHANDLER_FUNCTION(Close) {
340-
DJHANDLER_CHECK_THIS(object);
321+
JHANDLER_DECLARE_THIS_PTR(udpwrap, udp_wrap);
341322
DJHANDLER_CHECK_ARGS(0);
342323

343-
const iotjs_jval_t* judp = JHANDLER_GET_THIS(object);
344-
iotjs_handlewrap_t* wrap = iotjs_handlewrap_from_jobject(judp);
345-
346-
iotjs_handlewrap_close(wrap, NULL);
324+
iotjs_handlewrap_close(udp_wrap, NULL);
347325
}
348326

349327

@@ -355,16 +333,13 @@ JHANDLER_FUNCTION(GetSockeName) {
355333
}
356334

357335

358-
#define IOTJS_UV_SET_SOCKOPT(fn) \
359-
DJHANDLER_CHECK_THIS(object); \
360-
DJHANDLER_CHECK_ARGS(1, number); \
361-
\
362-
const iotjs_jval_t* judp = JHANDLER_GET_THIS(object); \
363-
iotjs_udpwrap_t* udp_wrap = iotjs_udpwrap_from_jobject(judp); \
364-
\
365-
int flag = JHANDLER_GET_ARG(0, number); \
366-
int err = fn(iotjs_udpwrap_udp_handle(udp_wrap), flag); \
367-
\
336+
#define IOTJS_UV_SET_SOCKOPT(fn) \
337+
JHANDLER_DECLARE_THIS_PTR(udpwrap, udp_wrap); \
338+
DJHANDLER_CHECK_ARGS(1, number); \
339+
\
340+
int flag = JHANDLER_GET_ARG(0, number); \
341+
int err = fn(iotjs_udpwrap_udp_handle(udp_wrap), flag); \
342+
\
368343
iotjs_jhandler_return_number(jhandler, err);
369344

370345

@@ -416,12 +391,9 @@ JHANDLER_FUNCTION(SetMulticastLoopback) {
416391

417392
void SetMembership(iotjs_jhandler_t* jhandler, uv_membership membership) {
418393
#if !defined(__NUTTX__) && !defined(__TIZENRT__)
419-
DJHANDLER_CHECK_THIS(object);
394+
JHANDLER_DECLARE_THIS_PTR(udpwrap, udp_wrap);
420395
DJHANDLER_CHECK_ARGS(1, string);
421396

422-
const iotjs_jval_t* judp = JHANDLER_GET_THIS(object);
423-
iotjs_udpwrap_t* udp_wrap = iotjs_udpwrap_from_jobject(judp);
424-
425397
iotjs_string_t address = JHANDLER_GET_ARG(0, string);
426398
const iotjs_jval_t* arg1 = iotjs_jhandler_get_arg(jhandler, 1);
427399
bool isUndefinedOrNull =

0 commit comments

Comments
 (0)