Index: /trunk/src/libopensc/muscle.c =================================================================== --- /trunk/src/libopensc/muscle.c (revision 4350) +++ /trunk/src/libopensc/muscle.c (revision 4912) @@ -31,11 +31,4 @@ #define MSC_DSA_PUBLIC 0x04 #define MSC_DSA_PRIVATE 0x05 - -#ifndef MAX -#define MAX(x, y) (((x) > (y)) ? (x) : (y)) -#endif -#ifndef MIN -#define MIN(x, y) (((x) < (y)) ? (x) : (y)) -#endif static msc_id inputId = { { 0xFF, 0xFF, 0xFF, 0xFF } }; Index: /trunk/src/libopensc/internal.h =================================================================== --- /trunk/src/libopensc/internal.h (revision 4902) +++ /trunk/src/libopensc/internal.h (revision 4912) @@ -48,4 +48,11 @@ #define msleep(t) Sleep(t) #define sleep(t) Sleep((t) * 1000) +#endif + +#ifndef MAX +#define MAX(x, y) (((x) > (y)) ? (x) : (y)) +#endif +#ifndef MIN +#define MIN(x, y) (((x) < (y)) ? (x) : (y)) #endif Index: /trunk/src/libopensc/card-atrust-acos.c =================================================================== --- /trunk/src/libopensc/card-atrust-acos.c (revision 4706) +++ /trunk/src/libopensc/card-atrust-acos.c (revision 4913) @@ -843,6 +843,6 @@ return SC_ERROR_INTERNAL; /* cache serial number */ - memcpy(card->serialnr.value, apdu.resp, apdu.resplen); - card->serialnr.len = apdu.resplen; + memcpy(card->serialnr.value, apdu.resp, MIN(apdu.resplen, SC_MAX_SERIALNR)); + card->serialnr.len = MIN(apdu.resplen, SC_MAX_SERIALNR); /* copy and return serial number */ memcpy(serial, &card->serialnr, sizeof(*serial)); Index: /trunk/src/libopensc/card-starcos.c =================================================================== --- /trunk/src/libopensc/card-starcos.c (revision 4706) +++ /trunk/src/libopensc/card-starcos.c (revision 4913) @@ -1280,6 +1280,6 @@ return SC_ERROR_INTERNAL; /* cache serial number */ - memcpy(card->serialnr.value, apdu.resp, apdu.resplen); - card->serialnr.len = apdu.resplen; + memcpy(card->serialnr.value, apdu.resp, MIN(apdu.resplen, SC_MAX_SERIALNR)); + card->serialnr.len = MIN(apdu.resplen, SC_MAX_SERIALNR); /* copy and return serial number */ memcpy(serial, &card->serialnr, sizeof(*serial)); Index: /trunk/src/libopensc/card-acos5.c =================================================================== --- /trunk/src/libopensc/card-acos5.c (revision 4118) +++ /trunk/src/libopensc/card-acos5.c (revision 4913) @@ -139,6 +139,6 @@ * Cache serial number. */ - memcpy(card->serialnr.value, apdu.resp, apdu.resplen); - card->serialnr.len = apdu.resplen; + memcpy(card->serialnr.value, apdu.resp, MIN(apdu.resplen, SC_MAX_SERIALNR)); + card->serialnr.len = MIN(apdu.resplen, SC_MAX_SERIALNR); /*