diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2010-01-28 17:49:25 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2010-01-28 17:49:25 +0000 |
commit | 92714455af3147405b6ce1532187bbbf960e5136 (patch) | |
tree | 7723fcfd279ca3358d84f90acdeaf4a5006fbe41 /crypto/engine | |
parent | 00b525781bcf4b5e6aad6bc506570fba57915c5d (diff) |
In engine_table_select() don't clear out entire error queue: just clear
out any we added using ERR_set_mark() and ERR_pop_to_mark() otherwise
errors from other sources (e.g. SSL library) can be wiped.
Diffstat (limited to 'crypto/engine')
-rw-r--r-- | crypto/engine/eng_table.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/crypto/engine/eng_table.c b/crypto/engine/eng_table.c index 954b4d7970..4fde948185 100644 --- a/crypto/engine/eng_table.c +++ b/crypto/engine/eng_table.c @@ -254,6 +254,7 @@ ENGINE *engine_table_select_tmp(ENGINE_TABLE **table, int nid, const char *f, in #endif return NULL; } + ERR_set_mark(); CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); /* Check again inside the lock otherwise we could race against cleanup * operations. But don't worry about a fprintf(stderr). */ @@ -327,7 +328,7 @@ end: CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); /* Whatever happened, any failed init()s are not failures in this * context, so clear our error state. */ - ERR_clear_error(); + ERR_pop_to_mark(); return ret; } |