fix rejection of dns responses with pointers past 512 byte offset
[musl] / src / string / strchrnul.c
index 05700ad..39e2635 100644 (file)
@@ -1,7 +1,6 @@
 #include <string.h>
 #include <stdint.h>
 #include <limits.h>
-#include "libc.h"
 
 #define ALIGN (sizeof(size_t))
 #define ONES ((size_t)-1/UCHAR_MAX)
 
 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;
 }