From 58e9e67ee56713c3637e2921dd92be23a86f4852 Mon Sep 17 00:00:00 2001 From: Pol Henarejos Date: Mon, 30 May 2022 00:51:36 +0200 Subject: [PATCH] Fix with data and extended length. --- src/ccid/ccid2040.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/ccid/ccid2040.c b/src/ccid/ccid2040.c index 34a0e2a..df2fc2a 100644 --- a/src/ccid/ccid2040.c +++ b/src/ccid/ccid2040.c @@ -234,20 +234,22 @@ static int usb_event_handle() { if (apdu.ne == 0) apdu.ne = 256; } - else if (ccid_header->dwLength == 7) { - apdu.nc = 0; - apdu.ne = (apdu.header[5] << 8) | apdu.header[6]; - if (apdu.ne == 0) - apdu.ne = 65536; - } - else if (apdu.header[4] == 0x0) { - apdu.nc = (apdu.header[5] << 8) | apdu.header[6]; - apdu.data = apdu.header+7; - if (apdu.nc+7+2 == ccid_header->dwLength) { - apdu.ne = (apdu.header[ccid_header->dwLength-2] << 8) | apdu.header[ccid_header->dwLength-1]; + else if (apdu.header[4] == 0x0 && ccid_header->dwLength >= 7) { + if (ccid_header->dwLength == 7) { + apdu.ne = (apdu.header[5] << 8) | apdu.header[6]; if (apdu.ne == 0) apdu.ne = 65536; } + else { + apdu.ne = 0; + apdu.nc = (apdu.header[5] << 8) | apdu.header[6]; + apdu.data = apdu.header+7; + if (apdu.nc+7+2 == ccid_header->dwLength) { + apdu.ne = (apdu.header[ccid_header->dwLength-2] << 8) | apdu.header[ccid_header->dwLength-1]; + if (apdu.ne == 0) + apdu.ne = 65536; + } + } } else { apdu.nc = apdu.header[4];