diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2016-05-11 21:14:57 +0100 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2016-05-12 12:02:38 +0100 |
commit | 7c0ef8431845ea741012a5a6ff7063dca801fadd (patch) | |
tree | 29a5fe81356f6baf98b7d6162367879cd1e38ecb /apps | |
parent | 3dfcb6a0ecbc210899e4b674331d0294189281b9 (diff) |
Don't leak memory if realloc fails.
RT#4403
Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/apps.c | 9 | ||||
-rw-r--r-- | apps/engine.c | 12 |
2 files changed, 12 insertions, 9 deletions
diff --git a/apps/apps.c b/apps/apps.c index 537d43ab35..c7e01b0cc4 100644 --- a/apps/apps.c +++ b/apps/apps.c @@ -176,8 +176,6 @@ int chopup_args(ARGS *arg, char *buf) if (arg->size == 0) { arg->size = 20; arg->argv = app_malloc(sizeof(*arg->argv) * arg->size, "argv space"); - if (arg->argv == NULL) - return 0; } for (p = buf;;) { @@ -189,11 +187,12 @@ int chopup_args(ARGS *arg, char *buf) /* The start of something good :-) */ if (arg->argc >= arg->size) { + char **tmp; arg->size += 20; - arg->argv = OPENSSL_realloc(arg->argv, - sizeof(*arg->argv) * arg->size); - if (arg->argv == NULL) + tmp = OPENSSL_realloc(arg->argv, sizeof(*arg->argv) * arg->size); + if (tmp == NULL) return 0; + arg->argv = tmp; } quoted = *p == '\'' || *p == '"'; if (quoted) diff --git a/apps/engine.c b/apps/engine.c index b60bfbc294..3b395b1c7d 100644 --- a/apps/engine.c +++ b/apps/engine.c @@ -107,13 +107,17 @@ static int append_buf(char **buf, int *size, const char *s) } if (strlen(*buf) + strlen(s) >= (unsigned int)*size) { + char *tmp; *size += 256; - *buf = OPENSSL_realloc(*buf, *size); + tmp = OPENSSL_realloc(*buf, *size); + if (tmp == NULL) { + OPENSSL_free(*buf); + *buf = NULL; + return 0; + } + *buf = tmp; } - if (*buf == NULL) - return 0; - if (**buf != '\0') OPENSSL_strlcat(*buf, ", ", *size); OPENSSL_strlcat(*buf, s, *size); |