Skip to content

Commit 651c919

Browse files
committed
server_new: cleanup more on failure scenarios
Signed-off-by: Fabian Groffen <grobian@gentoo.org>
1 parent cff3d33 commit 651c919

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

server.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1113,6 +1113,10 @@ server_new(
11131113
ret->secondariescnt = 0;
11141114
ret->ip = strdup(ip);
11151115
if (ret->ip == NULL) {
1116+
if (ret->mtlspemcert != NULL)
1117+
free(ret->mtlspemcert);
1118+
if (ret->mtlspemkey != NULL)
1119+
free(ret->mtlspemkey);
11161120
free(ret);
11171121
return NULL;
11181122
}
@@ -1123,12 +1127,20 @@ server_new(
11231127
ret->sockbufsize = sockbufsize;
11241128
ret->maxstalls = maxstalls;
11251129
if ((ret->batch = malloc(sizeof(char *) * (bsize + 1))) == NULL) {
1130+
if (ret->mtlspemcert != NULL)
1131+
free(ret->mtlspemcert);
1132+
if (ret->mtlspemkey != NULL)
1133+
free(ret->mtlspemkey);
11261134
free((char *)ret->ip);
11271135
free(ret);
11281136
return NULL;
11291137
}
11301138
ret->fd = -1;
11311139
if ((ret->strm = malloc(sizeof(z_strm))) == NULL) {
1140+
if (ret->mtlspemcert != NULL)
1141+
free(ret->mtlspemcert);
1142+
if (ret->mtlspemkey != NULL)
1143+
free(ret->mtlspemkey);
11321144
free((char *)ret->ip);
11331145
free(ret->batch);
11341146
free(ret);
@@ -1152,8 +1164,13 @@ server_new(
11521164
char *err = ERR_error_string(ERR_get_error(), NULL);
11531165
logerr("failed to load SSL verify locations from %s for "
11541166
"%s:%d: %s\n", sslCA, ret->ip, ret->port, err);
1167+
if (ret->mtlspemcert != NULL)
1168+
free(ret->mtlspemcert);
1169+
if (ret->mtlspemkey != NULL)
1170+
free(ret->mtlspemkey);
11551171
free((char *)ret->ip);
11561172
free(ret->batch);
1173+
SSL_CTX_free(ret->strm->ctx);
11571174
free(ret->strm);
11581175
free(ret);
11591176
return NULL;
@@ -1182,6 +1199,10 @@ server_new(
11821199
else if ((transport & 0xFFFF) == W_GZIP) {
11831200
z_strm *gzstrm = malloc(sizeof(z_strm));
11841201
if (gzstrm == NULL) {
1202+
if (ret->mtlspemcert != NULL)
1203+
free(ret->mtlspemcert);
1204+
if (ret->mtlspemkey != NULL)
1205+
free(ret->mtlspemkey);
11851206
free((char *)ret->ip);
11861207
free(ret->batch);
11871208
free(ret->strm);
@@ -1200,6 +1221,10 @@ server_new(
12001221
else if ((transport & 0xFFFF) == W_LZ4) {
12011222
z_strm *lzstrm = malloc(sizeof(z_strm));
12021223
if (lzstrm == NULL) {
1224+
if (ret->mtlspemcert != NULL)
1225+
free(ret->mtlspemcert);
1226+
if (ret->mtlspemkey != NULL)
1227+
free(ret->mtlspemkey);
12031228
free((char *)ret->ip);
12041229
free(ret->batch);
12051230
free(ret->strm);
@@ -1218,6 +1243,10 @@ server_new(
12181243
else if ((transport & 0xFFFF) == W_SNAPPY) {
12191244
z_strm *snpstrm = malloc(sizeof(z_strm));
12201245
if (snpstrm == NULL) {
1246+
if (ret->mtlspemcert != NULL)
1247+
free(ret->mtlspemcert);
1248+
if (ret->mtlspemkey != NULL)
1249+
free(ret->mtlspemkey);
12211250
free((char *)ret->ip);
12221251
free(ret->batch);
12231252
free(ret->strm);
@@ -1242,6 +1271,15 @@ server_new(
12421271
}
12431272
ret->queue = queue_new(qsize);
12441273
if (ret->queue == NULL) {
1274+
if (ret->mtlspemcert != NULL)
1275+
free(ret->mtlspemcert);
1276+
if (ret->mtlspemkey != NULL)
1277+
free(ret->mtlspemkey);
1278+
if (ret->strm->ctx != NULL)
1279+
SSL_CTX_free(ret->strm->ctx);
1280+
if (ret->strm->nextstrm != NULL)
1281+
free(ret->strm->nextstrm);
1282+
free(ret->strm);
12451283
free(ret->batch);
12461284
free((char *)ret->ip);
12471285
free(ret);

0 commit comments

Comments
 (0)