inet_pton: fix uninitialized memory use for IPv4-mapped IPv6 addresses
[musl] / src / network / inet_pton.c
index 4496b47..bcbdd9e 100644 (file)
@@ -39,20 +39,22 @@ int inet_pton(int af, const char *restrict s, void *restrict a0)
        for (i=0; ; i++) {
                if (s[0]==':' && brk<0) {
                        brk=i;
-                       ip[i]=0;
+                       ip[i&7]=0;
                        if (!*++s) break;
+                       if (i==7) return 0;
                        continue;
                }
                for (v=j=0; j<4 && (d=hexval(s[j]))>=0; j++)
                        v=16*v+d;
                if (j==0) return 0;
-               ip[i] = v;
+               ip[i&7] = v;
                if (!s[j] && (brk>=0 || i==7)) break;
                if (i==7) return 0;
                if (s[j]!=':') {
                        if (s[j]!='.' || (i<6 && brk<0)) return 0;
                        need_v4=1;
                        i++;
+                       ip[i&7]=0;
                        break;
                }
                s += j+1;