]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
MFC r327317:
authorrobak <robak@FreeBSD.org>
Tue, 3 Jul 2018 14:40:19 +0000 (14:40 +0000)
committerrobak <robak@FreeBSD.org>
Tue, 3 Jul 2018 14:40:19 +0000 (14:40 +0000)
commit8db912ed885553a4a6c8626e3c940d0af0931853
tree4bfc8684ca60b44367d8f0c0857ca7cc2b07334b
parent62b732f45dfe86a663fb78aec3e30ba28d0485c8
MFC r327317:

humanize_number(3): fix math edge case in rounding large numbers

Fix for remainder overflow, when in rare cases adding remainder to divider
exceeded 1 and turned the total to 1000 in final formatting, taking up
the space for the unit character.

The fix continues the division of the original number if the above case
happens -- added the appropriate check to the for loop performing
the division. This lowers the value shown, to make it fit into the buffer
space provided (1.0M for 4+1 character buffer, as used by ls).

Add test case for the reported bug and extend test program to support
providing buffer length (ls -lh uses 5, tests hard-coded 4).

PR: 224498
lib/libutil/humanize_number.3
lib/libutil/humanize_number.c
lib/libutil/tests/humanize_number_test.c