Fixed zero lenght allocation.
authorArmin Novak <armin.novak@thincast.com>
Tue, 1 Sep 2015 09:58:43 +0000 (11:58 +0200)
committerArmin Novak <armin.novak@thincast.com>
Tue, 1 Sep 2015 10:25:44 +0000 (12:25 +0200)
channels/smartcard/client/smartcard_operations.c

index b7f5fd7..c5929b2 100644 (file)
@@ -474,7 +474,9 @@ static LONG smartcard_GetStatusChangeA_Call(SMARTCARD_DEVICE* smartcard, SMARTCA
        }
 
        ret.cReaders = call->cReaders;
-       ret.rgReaderStates = (ReaderState_Return*) calloc(ret.cReaders, sizeof(ReaderState_Return));
+       ret.rgReaderStates = NULL;
+       if (ret.cReaders > 0)
+               ret.rgReaderStates = (ReaderState_Return*) calloc(ret.cReaders, sizeof(ReaderState_Return));
 
        if (!ret.rgReaderStates)
                return STATUS_NO_MEMORY;
@@ -539,7 +541,9 @@ static LONG smartcard_GetStatusChangeW_Call(SMARTCARD_DEVICE* smartcard, SMARTCA
        }
 
        ret.cReaders = call->cReaders;
-       ret.rgReaderStates = (ReaderState_Return*) calloc(ret.cReaders, sizeof(ReaderState_Return));
+       ret.rgReaderStates = NULL;
+       if (ret.cReaders)
+               ret.rgReaderStates = (ReaderState_Return*) calloc(ret.cReaders, sizeof(ReaderState_Return));
 
        if (!ret.rgReaderStates)
                return STATUS_NO_MEMORY;
@@ -1231,7 +1235,9 @@ static LONG smartcard_LocateCardsByATRA_Call(SMARTCARD_DEVICE* smartcard, SMARTC
        }
 
        ret.cReaders = call->cReaders;
-       ret.rgReaderStates = (ReaderState_Return*) calloc(ret.cReaders, sizeof(ReaderState_Return));
+       ret.rgReaderStates = NULL;
+       if (ret.cReaders > 0)
+               ret.rgReaderStates = (ReaderState_Return*) calloc(ret.cReaders, sizeof(ReaderState_Return));
 
        if (!ret.rgReaderStates)
                return STATUS_NO_MEMORY;