fix undefined behavior in getdelim via null pointer arithmetic and memcpy
[musl] / src / stdio / getdelim.c
index d2f5b15..df11444 100644 (file)
@@ -55,9 +55,11 @@ ssize_t getdelim(char **restrict s, size_t *restrict n, int delim, FILE *restric
                        *s = tmp;
                        *n = m;
                }
-               memcpy(*s+i, f->rpos, k);
-               f->rpos += k;
-               i += k;
+               if (k) {
+                       memcpy(*s+i, f->rpos, k);
+                       f->rpos += k;
+                       i += k;
+               }
                if (z) break;
                if ((c = getc_unlocked(f)) == EOF) {
                        if (!i || !feof(f)) {