提交 41bff723 编写于 作者: M Matt Caswell

Don't leak on an OPENSSL_realloc() failure

If OPENSSL_sk_insert() calls OPENSSL_realloc() and it fails, it was leaking
the originally allocated memory.
Reviewed-by: NRich Salz <rsalz@openssl.org>
上级 af58be76
......@@ -126,6 +126,7 @@ int OPENSSL_sk_insert(OPENSSL_STACK *st, const void *data, int loc)
if (st->num_alloc <= (size_t)(st->num + 1)) {
size_t doub_num_alloc = st->num_alloc * 2;
const char **tmpdata;
/* Overflow checks */
if (doub_num_alloc < st->num_alloc)
......@@ -135,17 +136,12 @@ int OPENSSL_sk_insert(OPENSSL_STACK *st, const void *data, int loc)
if (doub_num_alloc > SIZE_MAX / sizeof(char *))
return 0;
st->data = OPENSSL_realloc((char *)st->data,
sizeof(char *) * doub_num_alloc);
if (st->data == NULL) {
/*
* Reset these counters to prevent subsequent operations on
* (now non-existing) heap memory
*/
st->num_alloc = 0;
st->num = 0;
tmpdata = OPENSSL_realloc((char *)st->data,
sizeof(char *) * doub_num_alloc);
if (tmpdata == NULL)
return 0;
}
st->data = tmpdata;
st->num_alloc = doub_num_alloc;
}
if ((loc >= st->num) || (loc < 0)) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册