- Cast key[i] and key[i-1] to unsigned char to avoid sign extension. Triggers found by static analyzer Svace.
Signed-off-by: Anton Moryakov <[email protected]> --- archival/dpkg.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/archival/dpkg.c b/archival/dpkg.c index 8031956e9..f499752c0 100644 --- a/archival/dpkg.c +++ b/archival/dpkg.c @@ -179,7 +179,11 @@ static void make_hash(const char *key, unsigned *start, unsigned *decrement, con * shift amount is mod 24 because long int is 32 bit and data * to be shifted is 8, don't want to shift data to where it has * no effect */ - hash_num += (key[i] + key[i-1]) << ((key[i] * i) % 24); + unsigned long char_sum = (unsigned char)key[i] + (unsigned char)key[i-1]; + unsigned long shift_amount = ((unsigned char)key[i] * i) % 24; + + unsigned long shifted_value = char_sum << shift_amount; + hash_num += shifted_value; } *start = (unsigned) hash_num % hash_prime; *decrement = (unsigned) 1 + (hash_num % (hash_prime - 1)); -- 2.30.2 _______________________________________________ busybox mailing list [email protected] https://lists.busybox.net/mailman/listinfo/busybox
