diff options
author | Alon Levy <alevy@redhat.com> | 2011-02-02 15:11:59 +0200 |
---|---|---|
committer | Alon Levy <alevy@redhat.com> | 2011-02-03 16:54:27 +0200 |
commit | 3b03acffe00a90c10c6a5c686889ce7a4a1c5382 (patch) | |
tree | f7a4c1f31a777ffa361ec3274166da1cf17b1ac2 | |
parent | 86f89cdf87c83e1d609ecd32b95131e7f83ed08c (diff) |
vscclient: read payload after header check, before type switch
-rw-r--r-- | vscclient.c | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/vscclient.c b/vscclient.c index 5561145..1820aa9 100644 --- a/vscclient.c +++ b/vscclient.c @@ -284,17 +284,27 @@ do_command(void) reader_id = get_id_from_string(&string[7], reader_id); } reader = vreader_get_reader_by_id(reader_id); - error = vcard_emul_force_card_insert(reader); - printf("insert %s, returned %d\n", reader ? vreader_get_name(reader) - : "invalid reader", error); + if (reader != NULL) { + error = vcard_emul_force_card_insert(reader); + printf("insert %s, returned %d\n", + reader ? vreader_get_name(reader) + : "invalid reader", error); + } else { + printf("no reader by id %d found\n", reader_id); + } } else if (strncmp(string,"remove",6) == 0) { if (string[6] == ' ') { reader_id = get_id_from_string(&string[7], reader_id); } reader = vreader_get_reader_by_id(reader_id); - error = vcard_emul_force_card_remove(reader); - printf("remove %s, returned %d\n", reader ? vreader_get_name(reader) - : "invalid reader", error); + if (reader != NULL) { + error = vcard_emul_force_card_remove(reader); + printf("remove %s, returned %d\n", + reader ? vreader_get_name(reader) + : "invalid reader", error); + } else { + printf("no reader by id %d found\n", reader_id); + } } else if (strncmp(string,"select",6) == 0) { if (string[6] == ' ') { reader_id = get_id_from_string(&string[7], @@ -584,11 +594,21 @@ main ( } switch (mhHeader.type) { case VSC_APDU: + case VSC_Flush: + case VSC_Error: + case VSC_Init: rv = read ( sock, pbSendBuffer, mhHeader.length ); + break; + default: + printf ("Unexpected message of type 0x%X\n", mhHeader.type); + return 0; + } + switch (mhHeader.type) { + case VSC_APDU: if (rv < 0) { /* Error */ printf ("read error\n"); @@ -636,11 +656,6 @@ main ( send_msg(VSC_FlushComplete, mhHeader.reader_id, NULL, 0); break; case VSC_Error: - rv = read ( - sock, - pbSendBuffer, - mhHeader.length - ); error_msg = (VSCMsgError *) pbSendBuffer; if (error_msg->code == VSC_SUCCESS) { MUTEX_LOCK(pending_reader_lock); |