fix rejection of dns responses with pointers past 512 byte offset
[musl] / src / string / strchrnul.c
index f2b9ae1..39e2635 100644 (file)
@@ -9,16 +9,19 @@
 
 char *__strchrnul(const char *s, int c)
 {
-       size_t *w, k;
-
        c = (unsigned char)c;
        if (!c) return (char *)s + strlen(s);
 
+#ifdef __GNUC__
+       typedef size_t __attribute__((__may_alias__)) word;
+       const word *w;
        for (; (uintptr_t)s % ALIGN; s++)
                if (!*s || *(unsigned char *)s == c) return (char *)s;
-       k = ONES * c;
+       size_t k = ONES * c;
        for (w = (void *)s; !HASZERO(*w) && !HASZERO(*w^k); w++);
-       for (s = (void *)w; *s && *(unsigned char *)s != c; s++);
+       s = (void *)w;
+#endif
+       for (; *s && *(unsigned char *)s != c; s++);
        return (char *)s;
 }