Ryan Flynn [off-list ref] writes:
given n, tried to find i greater than n via i=1, iterate i *= 10.
given n sufficiently close to UINT_MAX this will overflow; which can
produce i==0, which results in an infinite loop. iteratively dividing
n /= 10 does not have this problem, and though division is slower than
multiplication this only runs once per `git format-patch
--cover-letter`
Signed-off-by: pizza <redacted>
Pizza?
This is somewhat amusing.
- digits_in_number() is called only with opt->total that is "int";
- opt->total is the total number of patches.
- the return value is used like this:
sprintf(buf, "%0*d", digits_in_number(opt->total), opt->nr);
and opt->nr runs from 1 to opt->total; the use of "d" would be already
wrong anyway even if you computed digits_in_number() correctly.
Perhaps we should get rid of this function altogether?