]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
store: Avoid spurious error from decoding at EOF
authorTomas Mraz <tomas@openssl.org>
Tue, 8 Jun 2021 16:25:09 +0000 (18:25 +0200)
committerTomas Mraz <tomas@openssl.org>
Thu, 10 Jun 2021 09:56:28 +0000 (11:56 +0200)
Fixes #15596

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15661)

providers/implementations/storemgmt/file_store.c

index 04021f49c281342446764c322313d3f940ea5196..d9c465581eaee4e913c500fd46b82f3eb444a4c2 100644 (file)
@@ -518,6 +518,7 @@ static int file_load_file(struct file_ctx_st *ctx,
                           OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)
 {
     struct file_load_data_st data;
+    int ret, err;
 
     /* Setup the decoders (one time shot per session */
 
@@ -533,7 +534,16 @@ static int file_load_file(struct file_ctx_st *ctx,
 
     /* Launch */
 
-    return OSSL_DECODER_from_bio(ctx->_.file.decoderctx, ctx->_.file.file);
+    ERR_set_mark();
+    ret = OSSL_DECODER_from_bio(ctx->_.file.decoderctx, ctx->_.file.file);
+    if (BIO_eof(ctx->_.file.file)
+        && ((err = ERR_peek_last_error()) != 0)
+        && ERR_GET_LIB(err) == ERR_LIB_OSSL_DECODER
+        && ERR_GET_REASON(err) == ERR_R_UNSUPPORTED)
+        ERR_pop_to_mark();
+    else
+        ERR_clear_last_mark();
+    return ret;
 }
 
 /*-