8000 Merge pull request #2467 from phpredis/multi-exec-segfault · phpredis/phpredis@f358687 · GitHub
[go: up one dir, main page]

Skip to content

Commit f358687

Browse files
authored
Merge pull request #2467 from phpredis/multi-exec-segfault
Fix segfault and remove redundant macros
2 parents 8a39cae + a9e53fd commit f358687

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

common.h

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -186,12 +186,6 @@ typedef enum {
186186
} \
187187
} while (0)
188188

189-
#define SOCKET_WRITE_COMMAND(redis_sock, cmd, cmd_len) \
190-
if(redis_sock_write(redis_sock, cmd, cmd_len) < 0) { \
191-
efree(cmd); \
192-
RETURN_FALSE; \
193-
}
194-
195189
#define REDIS_SAVE_CALLBACK(callback, closure_context) do { \
196190
fold_item *fi = malloc(sizeof(fold_item)); \
197191
fi->fun = callback; \
@@ -209,8 +203,9 @@ typedef enum {
209203
#define REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len) \
210204
if (IS_PIPELINE(redis_sock)) { \
211205
PIPELINE_ENQUEUE_COMMAND(cmd, cmd_len); \
212-
} else { \
213-
SOCKET_WRITE_COMMAND(redis_sock, cmd, cmd_len); \
206+
} else if (redis_sock_write(redis_sock, cmd, cmd_len) < 0) { \
207+
efree(cmd); \
208+
RETURN_FALSE; \
214209
} \
215210
efree(cmd);
216211

redis.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1899,7 +1899,9 @@ PHP_METHOD(Redis, multi)
18991899
REDIS_SAVE_CALLBACK(NULL, NULL);
19001900
REDIS_ENABLE_MODE(redis_sock, MULTI);
19011901
} else {
1902-
SOCKET_WRITE_COMMAND(redis_sock, RESP_MULTI_CMD, sizeof(RESP_MULTI_CMD) - 1)
1902+
if (redis_sock_write(redis_sock, ZEND_STRL(RESP_MULTI_CMD)) < 0) {
1903+
RETURN_FALSE;
1904+
}
19031905
if ((resp = redis_sock_read(redis_sock, &resp_len)) == NULL) {
19041906
RETURN_FALSE;
19051907
} else if (strncmp(resp, "+OK", 3) != 0) {
@@ -1995,8 +1997,9 @@ PHP_METHOD(Redis, exec)
19951997
REDIS_DISABLE_MODE(redis_sock, MULTI);
19961998
RETURN_ZVAL(getThis(), 1, 0);
19971999
}
1998-
SOCKET_WRITE_COMMAND(redis_sock, RESP_EXEC_CMD, sizeof(RESP_EXEC_CMD) - 1)
1999-
2000+
if (redis_sock_write(redis_sock, ZEND_STRL(RESP_EXEC_CMD)) < 0) {
2001+
RETURN_FALSE;
2002+
}
20002003
ret = redis_sock_read_multibulk_multi_reply(
20012004
INTERNAL_FUNCTION_PARAM_PASSTHRU, redis_sock, &z_ret);
20022005
free_reply_callbacks(redis_sock);

0 commit comments

Comments
 (0)
0