From: Emeric Brun Date: Thu, 1 Jul 2021 16:54:05 +0000 (+0200) Subject: BUG/MINOR: peers: fix data_type bit computation more than 32 data_types X-Git-Tag: v2.5-dev2~51 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=08b0f6780c45099b8d03bfd9e398d3f51519e667;p=thirdparty%2Fhaproxy.git BUG/MINOR: peers: fix data_type bit computation more than 32 data_types This patch fixes the computation of the bit of the current data_type in some part of code of peer protocol where the computation is limited to 32bits whereas the bitfield of data_types can support 64bits. Without this patch it could result in bugs when we will define more than 32 data_types. Backport is useless because there is currently less than 32 data_types --- diff --git a/src/peers.c b/src/peers.c index 5f71d1e278..87a12847cd 100644 --- a/src/peers.c +++ b/src/peers.c @@ -859,10 +859,10 @@ static int peer_prepare_switchmsg(char *msg, size_t size, struct peer_prep_param case STD_T_UINT: case STD_T_ULL: case STD_T_DICT: - data |= 1 << data_type; + data |= 1ULL << data_type; break; case STD_T_FRQP: - data |= 1 << data_type; + data |= 1ULL << data_type; intencode(data_type, &chunkq); intencode(st->table->data_arg[data_type].u, &chunkq); break; @@ -1671,7 +1671,7 @@ static int peer_treat_updatemsg(struct appctx *appctx, struct peer *p, int updt, for (data_type = 0 ; data_type < STKTABLE_DATA_TYPES ; data_type++) { uint64_t decoded_int; - if (!((1 << data_type) & st->remote_data)) + if (!((1ULL << data_type) & st->remote_data)) continue; decoded_int = intdecode(msg_cur, msg_end);