A physical smartcard with an ATR of 3B 95 95 40 FF AE 01 0E 00 00 was parsed incorrectly.
The '40' should have been the second TD; instead the FF is used, incorrectly. Signed-off-by: Jeremy White <jwh...@codeweavers.com> --- hw/usb/ccid-card-passthru.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c index 10f1d30..2ae3b81 100644 --- a/hw/usb/ccid-card-passthru.c +++ b/hw/usb/ccid-card-passthru.c @@ -168,8 +168,8 @@ static int check_atr(PassthruState *card, uint8_t *data, int len) opt_bytes++; } if (td & 0x8) { - opt_bytes++; td = data[opt_bytes + 2] >> 4; + opt_bytes++; } } if (len < 2 + historical_length + opt_bytes) { -- 1.7.10.4