diff --git a/lib/roken/parse_time.3 b/lib/roken/parse_time.3 index fbcce903b..d824e7691 100644 --- a/lib/roken/parse_time.3 +++ b/lib/roken/parse_time.3 @@ -107,7 +107,11 @@ and .Fn unparse_time_approx return the number of characters written to .Fa buf . -.\".Sh EXAMPLES +if the return value is greater than or equal to the +.Fa len +argument, the string was too short and some of the printed characters +were discarded. +.Sh EXAMPLES .Bd -literal #include #include diff --git a/lib/roken/parse_units.c b/lib/roken/parse_units.c index f224814eb..d417fe23d 100644 --- a/lib/roken/parse_units.c +++ b/lib/roken/parse_units.c @@ -212,9 +212,13 @@ unparse_something (int num, const struct units *units, char *s, size_t len, tmp = (*print) (s, len, div, u->name, num); if (tmp < 0) return tmp; - - len -= tmp; - s += tmp; + if (tmp > len) { + len = 0; + s = NULL; + } else { + len -= tmp; + s += tmp; + } ret += tmp; } }