@@ -, +, @@ @@ -272,9 +272,9 @@ enum nss_status _nss_mdns_gethostbyname4_r( // Copy address memcpy(&(tuple->addr), &(u.data.result[i].address), address_length); if(address_length < sizeof(ipv6_address_t)) { memset((&(tuple->addr) + address_length - sizeof(ipv6_address_t)), 0, (sizeof(ipv6_address_t) - address_length) ); } struct gaih_addrtuple { ... uint32_t addr[4]; ... }; ==12732== Invalid write of size 1 ==12732== at 0x4C11A29: memset (vg_replace_strmem.c:1239) ==12732== by 0x57FA348: _nss_mdns_minimal_gethostbyname4_r (nss.c:292) ==12732== by 0x4F016D8: gaih_inet.constprop.7 (getaddrinfo.c:806) ==12732== by 0x4F02673: getaddrinfo (getaddrinfo.c:2317) ==12732== by 0x4800B3B: main (a.c:34) hosts: files mdns_minimal [NOTFOUND=return] dns --- src/nss.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) --- a/src/nss.c +++ a/src/nss.c @@ -271,12 +271,8 @@ enum nss_status _nss_mdns_gethostbyname4_r( tuple->family = u.data.result[i].af; // Copy address + memset(&(tuple->addr), 0, sizeof(ipv6_address_t)); memcpy(&(tuple->addr), &(u.data.result[i].address), address_length); - if(address_length < sizeof(ipv6_address_t)) { - memset((&(tuple->addr) + address_length - sizeof(ipv6_address_t)), 0, - (sizeof(ipv6_address_t) - address_length) - ); - } // Assign interface scope id tuple->scopeid = u.data.result[i].scopeid; --