X-Git-Url: https://git.openssl.org/?a=blobdiff_plain;f=crypto%2Flhash%2Flhash.c;h=19c6d2c31d5e0734063efaa619d3ec0ca2b4f284;hb=152d26461609ae36f329d6f48b2d0749e43834f3;hp=3e58eea9c58b49bd89fd08dc6c1c904912e8a44a;hpb=739a1eb1961cdc3b1597a040766f3cb359d095f6;p=openssl.git diff --git a/crypto/lhash/lhash.c b/crypto/lhash/lhash.c index 3e58eea9c5..19c6d2c31d 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); @@ -74,8 +74,8 @@ void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data) void *ret; lh->error = 0; - if (lh->up_load <= (lh->num_items * LH_LOAD_MULT / lh->num_nodes)) - expand(lh); + if ((lh->up_load <= (lh->num_items * LH_LOAD_MULT / lh->num_nodes)) && !expand(lh)) + return NULL; /* 'lh->error++' already done in 'expand' */ rn = getrn(lh, data, &hash); @@ -184,7 +184,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 +216,7 @@ static void expand(OPENSSL_LHASH *lh) /* fputs("realloc error in lhash",stderr); */ lh->error++; lh->p = 0; - return; + return 0; } for (i = (int)lh->num_alloc_nodes; i < j; i++) /* 26/02/92 eay */ n[i] = NULL; /* 02/03/92 eay */ @@ -226,6 +226,7 @@ static void expand(OPENSSL_LHASH *lh) lh->p = 0; lh->b = n; } + return 1; } static void contract(OPENSSL_LHASH *lh)