=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/file/magic-load.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- src/usr.bin/file/magic-load.c 2015/08/11 22:02:40 1.9 +++ src/usr.bin/file/magic-load.c 2015/08/11 22:06:19 1.10 @@ -1,4 +1,4 @@ -/* $OpenBSD: magic-load.c,v 1.9 2015/08/11 22:02:40 nicm Exp $ */ +/* $OpenBSD: magic-load.c,v 1.10 2015/08/11 22:06:19 nicm Exp $ */ /* * Copyright (c) 2015 Nicholas Marriott @@ -773,6 +773,7 @@ { char *copy, *s, *cp, *endptr; size_t slen; + uint64_t u; while (isspace((u_char)**line)) (*line)++; @@ -843,8 +844,18 @@ if (*ml->type_string == 'u') endptr = magic_strtoull(copy, &ml->test_unsigned); - else + else { endptr = magic_strtoll(copy, &ml->test_signed); + if (endptr == NULL || *endptr != '\0') { + /* + * If we can't parse this as a signed number, try as + * unsigned instead. + */ + endptr = magic_strtoull(copy, &u); + if (endptr != NULL && *endptr == '\0') + ml->test_signed = (int64_t)u; + } + } if (endptr == NULL || *endptr != '\0') { magic_warn(ml, "can't parse number: %s", copy); goto fail;