fix internal buffer overrun in inet_pton
[oweals/musl.git] / src / network / inet_pton.c
index 4496b47b6d6ccaa20ae3dd0ec8a363f54694375d..d36c368917da58c1689e42eba8b2e9ecbd22486e 100644 (file)
@@ -39,14 +39,15 @@ 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]!=':') {