Seems to work, does this look right? -Bryan.
Index: magic-load.c =================================================================== RCS file: /cvs/src/usr.bin/file/magic-load.c,v retrieving revision 1.25 diff -u -p -r1.25 magic-load.c --- magic-load.c 1 Jul 2017 14:34:29 -0000 1.25 +++ magic-load.c 1 Jul 2017 18:44:42 -0000 @@ -1071,6 +1071,7 @@ magic_load(FILE *f, const char *path, in struct magic_line *ml = NULL, *parent, *parent0; char *line, *tmp; size_t size; + ssize_t slen; u_int at, level, n, i; m = xcalloc(1, sizeof *m); @@ -1084,15 +1085,11 @@ magic_load(FILE *f, const char *path, in at = 0; tmp = NULL; - while ((line = fgetln(f, &size))) { - if (line[size - 1] == '\n') - line[size - 1] = '\0'; - else { - tmp = xmalloc(size + 1); - memcpy(tmp, line, size); - tmp[size] = '\0'; - line = tmp; - } + while ((slen = getline(&tmp, &size, f)) != -1) { + line = tmp; + if (line[slen - 1] == '\n') + line[slen - 1] = '\0'; + at++; while (isspace((u_char)*line))