From 3fd716791b82a934fb27f6379b23099a5e914022 Mon Sep 17 00:00:00 2001 From: Klas Lindfors Date: Thu, 9 Jul 2015 10:34:39 +0200 Subject: [PATCH] avoid copying data to NULL pointer found by clang scan-build --- lib/ykpiv.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/ykpiv.c b/lib/ykpiv.c index 73ff743..b992602 100644 --- a/lib/ykpiv.c +++ b/lib/ykpiv.c @@ -271,9 +271,11 @@ ykpiv_rc ykpiv_transfer_data(ykpiv_state *state, const unsigned char *templ, } return YKPIV_SIZE_ERROR; } - memcpy(out_data, data, recv_len - 2); - out_data += recv_len - 2; - *out_len += recv_len - 2; + if(out_data) { + memcpy(out_data, data, recv_len - 2); + out_data += recv_len - 2; + *out_len += recv_len - 2; + } in_ptr += this_size; } while(in_ptr < in_data + in_len); while(*sw >> 8 == 0x61) { @@ -296,9 +298,11 @@ ykpiv_rc ykpiv_transfer_data(ykpiv_state *state, const unsigned char *templ, if(*out_len + recv_len - 2 > max_out) { fprintf(stderr, "Output buffer to small, wanted to write %lu, max was %lu.", *out_len + recv_len - 2, max_out); } - memcpy(out_data, data, recv_len - 2); - out_data += recv_len - 2; - *out_len += recv_len - 2; + if(out_data) { + memcpy(out_data, data, recv_len - 2); + out_data += recv_len - 2; + *out_len += recv_len - 2; + } } rc = SCardEndTransaction(state->card, SCARD_LEAVE_CARD); if(rc != SCARD_S_SUCCESS) {