summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2019-01-30 12:40:50 +1100
committerDamien George <damien.p.george@gmail.com>2019-01-30 12:40:50 +1100
commitdadee5fa2497807dbf3ce33e2432bc4bf39b4937 (patch)
treec4cf5ae70770efbe80eb2c46554d02c8e3103a9b
parent1fa8f977f5140a963698450220e308e1f28c16ab (diff)
esp32/modsocket: Fix crashes when connect/bind can't resolve given addr.
Fixes issue #4441.
-rw-r--r--ports/esp32/modsocket.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/ports/esp32/modsocket.c b/ports/esp32/modsocket.c
index 92f9a35b5..9d14fd46a 100644
--- a/ports/esp32/modsocket.c
+++ b/ports/esp32/modsocket.c
@@ -178,12 +178,16 @@ static int _socket_getaddrinfo2(const mp_obj_t host, const mp_obj_t portx, struc
return res;
}
-int _socket_getaddrinfo(const mp_obj_t addrtuple, struct addrinfo **resp) {
- mp_uint_t len = 0;
+STATIC void _socket_getaddrinfo(const mp_obj_t addrtuple, struct addrinfo **resp) {
mp_obj_t *elem;
- mp_obj_get_array(addrtuple, &len, &elem);
- if (len != 2) return -1;
- return _socket_getaddrinfo2(elem[0], elem[1], resp);
+ mp_obj_get_array_fixed_n(addrtuple, 2, &elem);
+ int res = _socket_getaddrinfo2(elem[0], elem[1], resp);
+ if (res != 0) {
+ mp_raise_OSError(res);
+ }
+ if (*resp == NULL) {
+ mp_raise_OSError(-2); // name or service not known
+ }
}
STATIC mp_obj_t socket_bind(const mp_obj_t arg0, const mp_obj_t arg1) {