Return to misc.c CVS log | Up to [local] / src / usr.bin / ssh |
version 1.107, 2016/11/30 00:28:31 | version 1.108, 2017/03/14 00:25:03 | ||
---|---|---|---|
|
|
||
long | long | ||
convtime(const char *s) | convtime(const char *s) | ||
{ | { | ||
long total, secs; | long total, secs, multiplier = 1; | ||
const char *p; | const char *p; | ||
char *endp; | char *endp; | ||
|
|
||
break; | break; | ||
case 'm': | case 'm': | ||
case 'M': | case 'M': | ||
secs *= MINUTES; | multiplier = MINUTES; | ||
break; | break; | ||
case 'h': | case 'h': | ||
case 'H': | case 'H': | ||
secs *= HOURS; | multiplier = HOURS; | ||
break; | break; | ||
case 'd': | case 'd': | ||
case 'D': | case 'D': | ||
secs *= DAYS; | multiplier = DAYS; | ||
break; | break; | ||
case 'w': | case 'w': | ||
case 'W': | case 'W': | ||
secs *= WEEKS; | multiplier = WEEKS; | ||
break; | break; | ||
default: | default: | ||
return -1; | return -1; | ||
} | } | ||
if (secs > LONG_MAX / multiplier) | |||
return -1; | |||
secs *= multiplier; | |||
if (total > LONG_MAX - secs) | |||
return -1; | |||
total += secs; | total += secs; | ||
if (total < 0) | if (total < 0) | ||
return -1; | return -1; |