From: Frantisek Sumsal Date: Sun, 13 Mar 2022 13:45:03 +0000 (+0100) Subject: macro: account for negative values in DECIMAL_STR_WIDTH() X-Git-Tag: v251-rc1~157^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e3dd9ea8ea4510221f73071ad30ee657ca77565d;p=thirdparty%2Fsystemd.git macro: account for negative values in DECIMAL_STR_WIDTH() With negative numbers we wouldn't account for the minus sign, thus returning a string with one character too short, triggering buffer overflows in certain situations. --- diff --git a/src/basic/macro.h b/src/basic/macro.h index aa04039e804..9e62f9c71c8 100644 --- a/src/basic/macro.h +++ b/src/basic/macro.h @@ -319,13 +319,13 @@ static inline int __coverity_check_and_return__(int condition) { sizeof(type) <= 4 ? 10U : \ sizeof(type) <= 8 ? 20U : sizeof(int[-2*(sizeof(type) > 8)]))) -#define DECIMAL_STR_WIDTH(x) \ - ({ \ - typeof(x) _x_ = (x); \ - size_t ans = 1; \ - while ((_x_ /= 10) != 0) \ - ans++; \ - ans; \ +#define DECIMAL_STR_WIDTH(x) \ + ({ \ + typeof(x) _x_ = (x); \ + size_t ans = IS_SIGNED_INTEGER_TYPE(_x_) ? 2 : 1; \ + while ((_x_ /= 10) != 0) \ + ans++; \ + ans; \ }) #define SWAP_TWO(x, y) do { \