From 115afdb07d10ed9f8c1f886f880a11a77243d2ba Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 11 Jul 2015 00:05:46 +0300 Subject: [PATCH] unix: socket.getaddrinfo: Port is unsigned value. Treating it as signed lead to buffer overflow for ports >= 32768. --- unix/modsocket.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/unix/modsocket.c b/unix/modsocket.c index 3d9a6ddd3a..63e6738078 100644 --- a/unix/modsocket.c +++ b/unix/modsocket.c @@ -367,9 +367,9 @@ STATIC mp_obj_t mod_socket_getaddrinfo(mp_uint_t n_args, const mp_obj_t *args) { // getaddrinfo accepts port in string notation, so however // it may seem stupid, we need to convert int to str if (MP_OBJ_IS_SMALL_INT(args[1])) { - int port = (short)MP_OBJ_SMALL_INT_VALUE(args[1]); + unsigned port = (unsigned short)MP_OBJ_SMALL_INT_VALUE(args[1]); char buf[6]; - sprintf(buf, "%d", port); + sprintf(buf, "%u", port); serv = buf; hints.ai_flags = AI_NUMERICSERV; #ifdef __UCLIBC_MAJOR__