Skip to content

Commit c8c52cf

Browse files
committed
Prevent underflow in memcached_*_response_decrement macros
1 parent bcc1a6e commit c8c52cf

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/libmemcached/common.h

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,11 +140,21 @@ static inline void memcached_server_response_increment(memcached_instance_st *in
140140
}
141141
#endif
142142

143-
#define memcached_server_response_decrement(A) (A)->cursor_active_--
144-
#define memcached_server_response_reset(A) (A)->cursor_active_ = 0
143+
#define memcached_server_response_decrement(A) do { \
144+
WATCHPOINT_ASSERT((A)->cursor_active_ > 0); \
145+
if ((A)->cursor_active_ > 0) { \
146+
(A)->cursor_active_--; \
147+
} \
148+
} while (0)
149+
#define memcached_server_response_reset(A) (A)->cursor_active_ = 0
145150

146151
#define memcached_instance_response_increment(A) (A)->cursor_active_++
147-
#define memcached_instance_response_decrement(A) (A)->cursor_active_--
152+
#define memcached_instance_response_decrement(A) do { \
153+
WATCHPOINT_ASSERT((A)->cursor_active_ > 0); \
154+
if ((A)->cursor_active_ > 0) { \
155+
(A)->cursor_active_--; \
156+
} \
157+
} while (0)
148158
#define memcached_instance_response_reset(A) (A)->cursor_active_ = 0
149159

150160
#ifdef __cplusplus

0 commit comments

Comments
 (0)