From e8d4026d234cc32f100bd8c4f4b3c5ac9112a386 Mon Sep 17 00:00:00 2001 From: frankmorgner Date: Sun, 10 Oct 2010 14:38:20 +0000 Subject: [PATCH] added length check on rapdu buffer. git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@312 96b47cad-a561-4643-ad3b-153ac7d7599c --- virtualsmartcard/src/vpcd/ifd.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/virtualsmartcard/src/vpcd/ifd.c b/virtualsmartcard/src/vpcd/ifd.c index 2e98577..a1ec94b 100644 --- a/virtualsmartcard/src/vpcd/ifd.c +++ b/virtualsmartcard/src/vpcd/ifd.c @@ -21,7 +21,8 @@ IFDHCreateChannel (DWORD Lun, DWORD Channel) RESPONSECODE IFDHCreateChannelByName (DWORD Lun, LPSTR DeviceName) { - Log2(PCSC_LOG_INFO, "Using default port %hu", VPCDPORT); + /* XXX see bug #312749 on https://alioth.debian.org/projects/pcsclite/ */ + Log3(PCSC_LOG_INFO, "Not opening %s. Using default port %hu", DeviceName, VPCDPORT); return IFDHCreateChannel (Lun, VPCDPORT); } @@ -156,6 +157,13 @@ IFDHTransmitToICC (DWORD Lun, SCARD_IO_HEADER SendPci, PUCHAR TxBuffer, return IFD_COMMUNICATION_ERROR; } + if (*RxLength < size) { + Log1(PCSC_LOG_ERROR, "Not enough memory for rapdu"); + *RxLength = 0; + free(rapdu); + return IFD_COMMUNICATION_ERROR; + } + (*RxLength) = size; RxBuffer = memcpy(RxBuffer, rapdu, size); free(rapdu);