In the previous formulation, it would first multiple then divide. It would then
promote to unsigned int. The formula would overflow for large len. For example,
needed = 2 when len == INT_MAX. In the revised formulation, it is promoted,
divided, then multiplied. The revised calculation avoids the overflow and
computes needed correctly over len in {0, 1, ..., INT_MAX}. For len == INT_MAX,
needed is correctly computed as
2863311533.
Signed-off-by: Tom Carroll <incentivedesign@gmail.com>
if (!buf || buf->error)
return;
- unsigned int needed = (4 * (len + 2) / 3) + 1;
+ unsigned int needed = ((len + 2u) / 3) * 4 + 1;
if (line_len)
needed += needed / line_len;