fix rejection of dns responses with pointers past 512 byte offset
[musl] / src / string / strlcpy.c
index 4d3ff92..ffa0b0b 100644 (file)
@@ -1,8 +1,7 @@
+#define _BSD_SOURCE
 #include <string.h>
-#include <stdlib.h>
 #include <stdint.h>
 #include <limits.h>
-#include "libc.h"
 
 #define ALIGN (sizeof(size_t)-1)
 #define ONES ((size_t)-1/UCHAR_MAX)
@@ -13,9 +12,11 @@ size_t strlcpy(char *d, const char *s, size_t n)
 {
        char *d0 = d;
        size_t *wd;
-       const size_t *ws;
 
        if (!n--) goto finish;
+#ifdef __GNUC__
+       typedef size_t __attribute__((__may_alias__)) word;
+       const word *ws;
        if (((uintptr_t)s & ALIGN) == ((uintptr_t)d & ALIGN)) {
                for (; ((uintptr_t)s & ALIGN) && n && (*d=*s); n--, s++, d++);
                if (n && *s) {
@@ -25,6 +26,7 @@ size_t strlcpy(char *d, const char *s, size_t n)
                        d=(void *)wd; s=(const void *)ws;
                }
        }
+#endif
        for (; n && (*d=*s); n--, s++, d++);
        *d = 0;
 finish: