From d4b589044946e17eaab3c0d01187fa98a0295cc8 Mon Sep 17 00:00:00 2001 From: Yaroslav Isakov Date: Wed, 7 Apr 2021 20:56:27 +0200 Subject: [PATCH] Fix error check in pgp_enumerate_blob --- src/libopensc/card-openpgp.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/libopensc/card-openpgp.c b/src/libopensc/card-openpgp.c index b26e1edff1..937ee74fd1 100644 --- a/src/libopensc/card-openpgp.c +++ b/src/libopensc/card-openpgp.c @@ -1246,14 +1246,16 @@ pgp_enumerate_blob(sc_card_t *card, pgp_blob_t *blob) r = sc_asn1_read_tag(&data, blob->len - (in - blob->data), &cla, &tag, &len); - if (data == NULL) { - sc_log(card->ctx, "Unexpected end of contents"); - return SC_ERROR_OBJECT_NOT_VALID; - } if (r == SC_ERROR_INVALID_ASN1_OBJECT) { sc_log(card->ctx, "Invalid ASN.1 object"); return SC_ERROR_OBJECT_NOT_VALID; } + /* Check for unknown error, or empty data */ + if (((r < 0) && (r != SC_ERROR_ASN1_END_OF_CONTENTS)) || + (data == NULL)) { + sc_log(card->ctx, "Unexpected end of contents"); + return SC_ERROR_OBJECT_NOT_VALID; + } /* undo ASN1's split of tag & class */ for (tmptag = tag; tmptag > 0x0FF; tmptag >>= 8) {