]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: peers: fix data_type bit computation more than 32 data_types
authorEmeric Brun <ebrun@haproxy.com>
Thu, 1 Jul 2021 16:54:05 +0000 (18:54 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 6 Jul 2021 05:24:42 +0000 (07:24 +0200)
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

src/peers.c

index 5f71d1e2781ae639562db6219ed6c35ca9537865..87a12847cd217944975d7c15d28442136ae60bdf 100644 (file)
@@ -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);