From 7deaa990d3931192a57bf97df7d26ba8c63c6d36 Mon Sep 17 00:00:00 2001 From: Pol Henarejos Date: Sat, 24 Dec 2022 00:49:25 +0100 Subject: [PATCH] An app can be selected even if there is another selected previously. Signed-off-by: Pol Henarejos --- src/apdu.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/apdu.c b/src/apdu.c index e4022a3..dd71132 100644 --- a/src/apdu.c +++ b/src/apdu.c @@ -26,13 +26,12 @@ extern uint32_t timeout; int process_apdu() { led_set_blink(BLINK_PROCESSING); - if (!current_app) - { - if (INS(apdu) == 0xA4 && P1(apdu) == 0x04 && (P2(apdu) == 0x00 || P2(apdu) == 0x4)) { //select by AID - for (int a = 0; a < num_apps; a++) { - if ((current_app = apps[a].select_aid(&apps[a], apdu.data, apdu.nc))) { - return set_res_sw(0x90,0x00); - } + if (INS(apdu) == 0xA4 && P1(apdu) == 0x04 && (P2(apdu) == 0x00 || P2(apdu) == 0x4)) { //select by AID + if (current_app && current_app->unload) + current_app->unload(); + for (int a = 0; a < num_apps; a++) { + if ((current_app = apps[a].select_aid(&apps[a], apdu.data, apdu.nc))) { + return set_res_sw(0x90,0x00); } } return set_res_sw(0x6a, 0x82);