From 6ca71a9297b0f9e5a59b8adf3bc8204de5c308a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20L=C3=A9caille?= Date: Tue, 22 Aug 2017 10:33:14 +0200 Subject: [PATCH] BUG/MINOR: Wrong type used as argument for spoe_decode_buffer(). Contrary to 64-bits libCs where size_t type size is 8, on systems with 32-bits size of size_t is 4 (the size of a long) which does not equal to size of uint64_t type. This was revealed by such GCC warnings on 32bits systems: src/flt_spoe.c:2259:40: warning: passing argument 4 of spoe_decode_buffer from incompatible pointer type if (spoe_decode_buffer(&p, end, &str, &sz) == -1) ^ As the already existing code using spoe_decode_buffer() already use such pointers to uint64_t, in place of pointer to size_t ;), most of this code is in contrib directory, this simple patch modifies the prototype of spoe_decode_buffer() so that to use a pointer to uint64_t in place of a pointer to size_t, uint64_t type being the type finally required for decode_varint(). --- include/proto/spoe.h | 7 +++---- src/flt_spoe.c | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/include/proto/spoe.h b/include/proto/spoe.h index 1372a7d45..002cf7d76 100644 --- a/include/proto/spoe.h +++ b/include/proto/spoe.h @@ -92,7 +92,7 @@ spoe_encode_frag_buffer(const char *str, size_t len, char **buf, char *end) * On success, it returns the buffer length and <*buf> is moved after the * encoded buffer. Otherwise, it returns -1. */ static inline int -spoe_decode_buffer(char **buf, char *end, char **str, size_t *len) +spoe_decode_buffer(char **buf, char *end, char **str, uint64_t *len) { char *p = *buf; uint64_t sz; @@ -248,8 +248,7 @@ spoe_skip_data(char **buf, char *end) { char *str, *p = *buf; int type, ret; - size_t sz; - uint64_t v; + uint64_t v, sz; if (p >= end) return -1; @@ -296,7 +295,7 @@ spoe_decode_data(char **buf, char *end, struct sample *smp) { char *str, *p = *buf; int type, r = 0; - size_t sz; + uint64_t sz; if (p >= end) return -1; diff --git a/src/flt_spoe.c b/src/flt_spoe.c index 5d5744777..1a8bd2c0f 100644 --- a/src/flt_spoe.c +++ b/src/flt_spoe.c @@ -655,7 +655,7 @@ spoe_handle_agenthello_frame(struct appctx *appctx, char *frame, size_t size) vsn = max_frame_size = flags = 0; while (p < end) { char *str; - size_t sz; + uint64_t sz; int ret; /* Decode the item key */ @@ -836,7 +836,7 @@ spoe_handle_agentdiscon_frame(struct appctx *appctx, char *frame, size_t size) /* Loop on K/V items */ while (p < end) { char *str; - size_t sz; + uint64_t sz; int ret; /* Decode the item key */