diff options
author | Drew DeVault <[email protected]> | 2016-12-17 13:23:44 -0500 |
---|---|---|
committer | GitHub <[email protected]> | 2016-12-17 13:23:44 -0500 |
commit | f04ee0e68d885d7e1101cc88f9a9337202041f1f (patch) | |
tree | fa4dc296a5f1377867752d320ceef4e4b0178bbf /common/ipc-client.c | |
parent | 6c0fc2093641868df28c4087902a040f7fae05d4 (diff) | |
parent | d859f825d3612492678f5cd6cc6dc1f2647929e1 (diff) |
Merge pull request #995 from SirCmpwn/memory-use
Handle allocation failures
Diffstat (limited to 'common/ipc-client.c')
-rw-r--r-- | common/ipc-client.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/common/ipc-client.c b/common/ipc-client.c index 106f9d86..d011bd26 100644 --- a/common/ipc-client.c +++ b/common/ipc-client.c @@ -52,10 +52,18 @@ struct ipc_response *ipc_recv_response(int socketfd) { } struct ipc_response *response = malloc(sizeof(struct ipc_response)); + if (!response) { + goto error_1; + } + total = 0; response->size = data32[0]; response->type = data32[1]; char *payload = malloc(response->size + 1); + if (!payload) { + goto error_2; + } + while (total < response->size) { ssize_t received = recv(socketfd, payload + total, response->size - total, 0); if (received < 0) { @@ -67,6 +75,11 @@ struct ipc_response *ipc_recv_response(int socketfd) { response->payload = payload; return response; +error_2: + free(response); +error_1: + sway_log(L_ERROR, "Unable to allocate memory for IPC response"); + return NULL; } void free_ipc_response(struct ipc_response *response) { |