From 9e174e8f7d134fea69b0afd7e36443009b83badf Mon Sep 17 00:00:00 2001 From: Pei-Hsuan Hung Date: Fri, 4 Jun 2021 11:33:39 +0800 Subject: Add do while(0) protection for macros Wrapping multi-line macros in do...while(0) statement prevents potential dangling else problem. --- hiredis.h | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/hiredis.h b/hiredis.h index b378128..7e2a84d 100644 --- a/hiredis.h +++ b/hiredis.h @@ -220,18 +220,21 @@ typedef struct { /** * Helper macros to initialize options to their specified fields. */ -#define REDIS_OPTIONS_SET_TCP(opts, ip_, port_) \ - (opts)->type = REDIS_CONN_TCP; \ - (opts)->endpoint.tcp.ip = ip_; \ - (opts)->endpoint.tcp.port = port_; - -#define REDIS_OPTIONS_SET_UNIX(opts, path) \ - (opts)->type = REDIS_CONN_UNIX; \ - (opts)->endpoint.unix_socket = path; - -#define REDIS_OPTIONS_SET_PRIVDATA(opts, data, dtor) \ - (opts)->privdata = data; \ - (opts)->free_privdata = dtor; \ +#define REDIS_OPTIONS_SET_TCP(opts, ip_, port_) do { \ + (opts)->type = REDIS_CONN_TCP; \ + (opts)->endpoint.tcp.ip = ip_; \ + (opts)->endpoint.tcp.port = port_; \ + } while(0) + +#define REDIS_OPTIONS_SET_UNIX(opts, path) do { \ + (opts)->type = REDIS_CONN_UNIX; \ + (opts)->endpoint.unix_socket = path; \ + } while(0) + +#define REDIS_OPTIONS_SET_PRIVDATA(opts, data, dtor) do { \ + (opts)->privdata = data; \ + (opts)->free_privdata = dtor; \ + } while(0) typedef struct redisContextFuncs { void (*free_privctx)(void *); -- cgit v1.2.3