=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/timeout/timeout.c,v retrieving revision 1.10 retrieving revision 1.11 diff -c -r1.10 -r1.11 *** src/usr.bin/timeout/timeout.c 2021/09/01 20:18:54 1.10 --- src/usr.bin/timeout/timeout.c 2021/09/01 21:43:51 1.11 *************** *** 1,6 **** ! /* $OpenBSD: timeout.c,v 1.10 2021/09/01 20:18:54 job Exp $ */ ! /*- * Copyright (c) 2021 Job Snijders * Copyright (c) 2014 Baptiste Daroussin * Copyright (c) 2014 Vsevolod Stakhov --- 1,6 ---- ! /* $OpenBSD: timeout.c,v 1.11 2021/09/01 21:43:51 job Exp $ */ ! /* * Copyright (c) 2021 Job Snijders * Copyright (c) 2014 Baptiste Daroussin * Copyright (c) 2014 Vsevolod Stakhov *************** *** 63,81 **** parse_duration(const char *duration) { double ret; ! char *end; ! ret = strtod(duration, &end); ! if (ret == 0 && end == duration) err(1, "invalid duration"); ! if (end == NULL || *end == '\0') return (ret); ! if (end != NULL && *(end + 1) != '\0') err(1, "invalid duration"); ! switch (*end) { case 's': break; case 'm': --- 63,83 ---- parse_duration(const char *duration) { double ret; ! char *suffix; ! ret = strtod(duration, &suffix); ! if (ret == 0 && suffix == duration) err(1, "invalid duration"); + if (ret < 0 || ret >= 100000000UL) + err(1, "invalid duration"); ! if (suffix == NULL || *suffix == '\0') return (ret); ! if (suffix != NULL && *(suffix + 1) != '\0') err(1, "invalid duration"); ! switch (*suffix) { case 's': break; case 'm': *************** *** 90,98 **** default: err(1, "invalid duration"); } - - if (ret < 0 || ret >= 100000000UL) - err(1, "invalid duration"); return (ret); } --- 92,97 ----