- 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

Reply via email to