diff options
author | Tomas Mraz <tomas@openssl.org> | 2022-10-12 10:36:20 +0200 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2022-10-21 18:03:33 +0200 |
commit | 367ee2152e019d72f63537ae898eda311bc9219a (patch) | |
tree | cde4b048352703e8cc0ba8ed0ed58d4666887855 /crypto/stack | |
parent | d8f0b0fc1fe520939c0a2ae1aafd394afcde4e55 (diff) |
stack: Do not add error if pop/shift/value accesses outside of the stack
This partially reverts commit 30eba7f35983a917f1007bce45040c0af3442e42.
This is legitimate use of the stack functions and no error
should be reported apart from the NULL return value.
Fixes #19389
Reviewed-by: Todd Short <todd.short@me.com>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/19400)
(cherry picked from commit a8086e6bfc37355626393751a94bc5c92df7e9d3)
Diffstat (limited to 'crypto/stack')
-rw-r--r-- | crypto/stack/stack.c | 43 |
1 files changed, 8 insertions, 35 deletions
diff --git a/crypto/stack/stack.c b/crypto/stack/stack.c index 8894f6be8d..e0ddd3eca2 100644 --- a/crypto/stack/stack.c +++ b/crypto/stack/stack.c @@ -299,6 +299,9 @@ void *OPENSSL_sk_delete_ptr(OPENSSL_STACK *st, const void *p) { int i; + if (st == NULL) + return NULL; + for (i = 0; i < st->num; i++) if (st->data[i] == p) return internal_delete(st, i); @@ -307,15 +310,8 @@ void *OPENSSL_sk_delete_ptr(OPENSSL_STACK *st, const void *p) void *OPENSSL_sk_delete(OPENSSL_STACK *st, int loc) { - if (st == NULL) { - ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER); + if (st == NULL || loc < 0 || loc >= st->num) return NULL; - } - if (loc < 0 || loc >= st->num) { - ERR_raise_data(ERR_LIB_X509, ERR_R_PASSED_INVALID_ARGUMENT, - "loc=%d", loc); - return NULL; - } return internal_delete(st, loc); } @@ -399,37 +395,21 @@ int OPENSSL_sk_unshift(OPENSSL_STACK *st, const void *data) void *OPENSSL_sk_shift(OPENSSL_STACK *st) { - if (st == NULL) { - ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER); - return NULL; - } - if (st->num == 0) { - ERR_raise(ERR_LIB_X509, ERR_R_PASSED_INVALID_ARGUMENT); + if (st == NULL || st->num == 0) return NULL; - } return internal_delete(st, 0); } void *OPENSSL_sk_pop(OPENSSL_STACK *st) { - if (st == NULL) { - ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER); - return NULL; - } - if (st->num == 0) { - ERR_raise(ERR_LIB_X509, ERR_R_PASSED_INVALID_ARGUMENT); + if (st == NULL || st->num == 0) return NULL; - } return internal_delete(st, st->num - 1); } void OPENSSL_sk_zero(OPENSSL_STACK *st) { - if (st == NULL) { - ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER); - return; - } - if (st->num == 0) + if (st == NULL || st->num == 0) return; memset(st->data, 0, sizeof(*st->data) * st->num); st->num = 0; @@ -462,15 +442,8 @@ int OPENSSL_sk_num(const OPENSSL_STACK *st) void *OPENSSL_sk_value(const OPENSSL_STACK *st, int i) { - if (st == NULL) { - ERR_raise(ERR_LIB_X509, ERR_R_PASSED_NULL_PARAMETER); - return NULL; - } - if (i < 0 || i >= st->num) { - ERR_raise_data(ERR_LIB_X509, ERR_R_PASSED_INVALID_ARGUMENT, - "i=%d", i); + if (st == NULL || i < 0 || i >= st->num) return NULL; - } return (void *)st->data[i]; } |