aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2025-04-24 09:20:22 +0000
committerWerner Koch <[email protected]>2025-04-24 09:28:27 +0000
commit84229829b52d246b7753b9ace0c8b723ff532bce (patch)
tree230e7d12f5780524988e4cfee1bf497a1cb33036
parentPost release updates (diff)
downloadgnupg-STABLE-BRANCH-2-2.tar.gz
gnupg-STABLE-BRANCH-2-2.zip
scd:p15: Accept P15 cards with a zero-length label.STABLE-BRANCH-2-2
* scd/app-p15.c (read_ef_tokeninfo): Allow for a zero length label. -- Some versions of the CardOS personalisation software seem to store a missing labels as zero-length object instead of not storing the object at all. Due to a lack of such a card this patch has not been tested.
-rw-r--r--scd/app-p15.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/scd/app-p15.c b/scd/app-p15.c
index 951ca374e..a2f36551d 100644
--- a/scd/app-p15.c
+++ b/scd/app-p15.c
@@ -3536,14 +3536,23 @@ read_ef_tokeninfo (app_t app)
/* Get next TLV. */
err = parse_ber_header (&p, &n, &class, &tag, &constructed,
&ndef, &objlen, &hdrlen);
- if (!err && (objlen > n || !objlen))
+ if (!err && objlen > n)
err = gpg_error (GPG_ERR_INV_OBJ);
if (err)
goto leave;
+
+ if (class == CLASS_CONTEXT && tag == 0 && !objlen)
+ ; /* The optional label is stored as zero length object - okay. */
+ else if (!objlen)
+ {
+ err = gpg_error (GPG_ERR_INV_OBJ);
+ goto leave;
+ }
}
if (class == CLASS_CONTEXT && tag == 0)
{
- app->app_local->token_label = percent_data_escape (0, NULL, p, objlen);
+ if (objlen)
+ app->app_local->token_label = percent_data_escape (0, NULL, p, objlen);
p += objlen;
n -= objlen;