]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
pem_read_bio_key_decoder: Avoid spurious error on unknown PEM data
authorTomas Mraz <tomas@openssl.org>
Tue, 29 Jun 2021 13:46:25 +0000 (15:46 +0200)
committerTomas Mraz <tomas@openssl.org>
Fri, 2 Jul 2021 13:33:27 +0000 (15:33 +0200)
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15949)

crypto/pem/pem_pkey.c

index ca6b2a213273163438aae1e33a7cf61c8928d78f..4a029daa950e44c31f19cff4971db8c07d5227ea 100644 (file)
@@ -55,11 +55,24 @@ static EVP_PKEY *pem_read_bio_key_decoder(BIO *bp, EVP_PKEY **x,
     if (!OSSL_DECODER_CTX_set_pem_password_cb(dctx, cb, u))
         goto err;
 
+    ERR_set_mark();
     while (!OSSL_DECODER_from_bio(dctx, bp) || pkey == NULL)
-        if (BIO_eof(bp) != 0 || (newpos = BIO_tell(bp)) < 0 || newpos <= pos)
+        if (BIO_eof(bp) != 0 || (newpos = BIO_tell(bp)) < 0 || newpos <= pos) {
+            ERR_clear_last_mark();
             goto err;
-        else
+        } else {
+            if (ERR_GET_REASON(ERR_peek_error()) == ERR_R_UNSUPPORTED) {
+                /* unsupported PEM data, try again */
+                ERR_pop_to_mark();
+                ERR_set_mark();
+            } else {
+                /* other error, bail out */
+                ERR_clear_last_mark();
+                goto err;
+            }
             pos = newpos;
+        }
+    ERR_pop_to_mark();
 
     if (!evp_keymgmt_util_has(pkey, selection)) {
         EVP_PKEY_free(pkey);