~ubuntu-branches/ubuntu/lucid/pcsc-lite/lucid-security

« back to all changes in this revision

Viewing changes to src/winscard_msg.c

  • Committer: Bazaar Package Importer
  • Author(s): Ludovic Rousseau
  • Date: 2007-06-19 21:19:54 UTC
  • mfrom: (1.2.9 upstream)
  • Revision ID: james.westby@ubuntu.com-20070619211954-h5jtokimr8wrw3oj
Tags: 1.4.3-1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
 *  Damien Sauveron <damien.sauveron@labri.fr>
7
7
 *  Ludoic Rousseau <ludovic.rousseau@free.fr>
8
8
 *
9
 
 * $Id: winscard_msg.c 2539 2007-05-23 07:28:21Z rousseau $
 
9
 * $Id: winscard_msg.c 2565 2007-06-17 16:48:47Z rousseau $
10
10
 */
11
11
 
12
12
/**
433
433
                || (SCARD_CONTROL_EXTENDED == command))
434
434
        {
435
435
                /* first block */
436
 
                memcpy(msgStruct.data, data, size);
 
436
                if (size > sizeof(msgStruct.data))
 
437
                        memcpy(msgStruct.data, data, sizeof(msgStruct.data));
 
438
                else
 
439
                {
 
440
                        memcpy(msgStruct.data, data, size);
 
441
                        memset(msgStruct.data+size, 0, sizeof(msgStruct.data)-size);
 
442
                }
 
443
                        
437
444
                ret = SHMMessageSend(&msgStruct, sizeof(msgStruct), dwClientID,
438
445
                        blockAmount);
439
446
 
440
447
                /* do not send an empty second block */
441
 
                if ((0 == ret) && (size > PCSCLITE_MAX_MESSAGE_SIZE))
 
448
                if ((0 == ret) && (size > sizeof(msgStruct.data)))
442
449
                {
443
450
                        /* second block */
444
 
                        ret = SHMMessageSend(data+PCSCLITE_MAX_MESSAGE_SIZE,
445
 
                                size-PCSCLITE_MAX_MESSAGE_SIZE, dwClientID, blockAmount);
 
451
                        ret = SHMMessageSend(data+sizeof(msgStruct.data),
 
452
                                size-sizeof(msgStruct.data), dwClientID, blockAmount);
446
453
                }
447
454
        }
448
455
        else
455
462
 
456
463
        if (SCARD_TRANSMIT == command)
457
464
                /* clean APDU buffer to remove any possible PIN or secret value */
458
 
                memset(msgStruct.data, 0, min(size, PCSCLITE_MAX_MESSAGE_SIZE));
 
465
                memset(msgStruct.data, 0, min(size, sizeof(msgStruct.data)));
459
466
 
460
467
        return ret;
461
468
}