luci-lib-nixio: pass exact sockaddr length to getnameinfo()
authorJo-Philipp Wich <jow@openwrt.org>
Thu, 30 Jul 2015 20:16:47 +0000 (22:16 +0200)
committerJo-Philipp Wich <jow@openwrt.org>
Thu, 30 Jul 2015 20:38:36 +0000 (22:38 +0200)
Musl libc requires the length parameter of getnameinfo() to be exactly
`sizeof(struct sockaddr_in)` or `sizeof(struct sockaddr_in6)`, depending on
the passed sockaddr family.

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
libs/luci-lib-nixio/src/address.c

index 4fd557d..8ab4fa8 100644 (file)
@@ -331,7 +331,9 @@ static int nixio_getnameinfo(lua_State *L) {
 
        nixio__addr_write(&addr, (struct sockaddr *)&saddr);
 
-       int res = getnameinfo((struct sockaddr *)&saddr, sizeof(saddr),
+       int res = getnameinfo((struct sockaddr *)&saddr,
+        (saddr.ss_family == AF_INET)
+         ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6),
         host, sizeof(host), NULL, 0, NI_NAMEREQD);
 
 #ifdef __linux__