summaryrefslogtreecommitdiff
path: root/crypto/lhash
diff options
context:
space:
mode:
authormrpre <mrpre@163.com>2016-06-16 18:00:38 +0800
committerRich Salz <rsalz@openssl.org>2016-07-01 10:56:19 -0400
commit0a1d3a8152ffb96d42e56c3c1f04eb14a45e66aa (patch)
tree5e938d3735ebd3a0899ec56f8fcc3e3be491d656 /crypto/lhash
parenta66069dbcd020f25b80c66c0e71e137683c54914 (diff)
downloadopenssl-new-0a1d3a8152ffb96d42e56c3c1f04eb14a45e66aa.tar.gz
add return value for expand
Reviewed-by: Richard Levitte <levitte@openssl.org> Reviewed-by: Rich Salz <rsalz@openssl.org> (Merged from https://github.com/openssl/openssl/pull/1223)
Diffstat (limited to 'crypto/lhash')
-rw-r--r--crypto/lhash/lhash.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/crypto/lhash/lhash.c b/crypto/lhash/lhash.c
index 3e58eea9c5..1ca4289e05 100644
--- a/crypto/lhash/lhash.c
+++ b/crypto/lhash/lhash.c
@@ -20,7 +20,7 @@
#define UP_LOAD (2*LH_LOAD_MULT) /* load times 256 (default 2) */
#define DOWN_LOAD (LH_LOAD_MULT) /* load times 256 (default 1) */
-static void expand(OPENSSL_LHASH *lh);
+static int expand(OPENSSL_LHASH *lh);
static void contract(OPENSSL_LHASH *lh);
static OPENSSL_LH_NODE **getrn(OPENSSL_LHASH *lh, const void *data, unsigned long *rhash);
@@ -72,11 +72,17 @@ void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data)
unsigned long hash;
OPENSSL_LH_NODE *nn, **rn;
void *ret;
-
+ int val = 0;
+
lh->error = 0;
if (lh->up_load <= (lh->num_items * LH_LOAD_MULT / lh->num_nodes))
- expand(lh);
-
+ val = expand(lh);
+
+ if(val){
+ lh->error++;
+ return (NULL);
+ }
+
rn = getrn(lh, data, &hash);
if (*rn == NULL) {
@@ -184,7 +190,7 @@ void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void
doall_util_fn(lh, 1, (OPENSSL_LH_DOALL_FUNC)0, func, arg);
}
-static void expand(OPENSSL_LHASH *lh)
+static int expand(OPENSSL_LHASH *lh)
{
OPENSSL_LH_NODE **n, **n1, **n2, *np;
unsigned int p, i, j;
@@ -216,7 +222,7 @@ static void expand(OPENSSL_LHASH *lh)
/* fputs("realloc error in lhash",stderr); */
lh->error++;
lh->p = 0;
- return;
+ return -1;
}
for (i = (int)lh->num_alloc_nodes; i < j; i++) /* 26/02/92 eay */
n[i] = NULL; /* 02/03/92 eay */
@@ -226,6 +232,7 @@ static void expand(OPENSSL_LHASH *lh)
lh->p = 0;
lh->b = n;
}
+ return 0;
}
static void contract(OPENSSL_LHASH *lh)