From c3c68e86f04ea2e5281fc9cc3053587fd159d112 Mon Sep 17 00:00:00 2001 From: sth Date: Thu, 14 Aug 2003 07:13:44 +0000 Subject: [PATCH] Global Platform PIN Encoding: 1. Fix for pin changes: use the real length instead of the max length -- 2. Check for valid pin chars git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@1356 c6295689-39f2-0310-b995-f0e70906c6a9 --- src/libopensc/sec.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/libopensc/sec.c b/src/libopensc/sec.c index a1b243f3..59b5bec8 100644 --- a/src/libopensc/sec.c +++ b/src/libopensc/sec.c @@ -226,8 +226,15 @@ int sc_build_pin(u8 *buf, size_t buflen, struct sc_pin_cmd_pin *pin, int pad) return SC_ERROR_INVALID_ARGUMENTS; if (pin->encoding == SC_PIN_ENCODING_GLP) { + int i; + while (pin_len > 0 && pin->data[pin_len - 1] == 0xFF) + pin_len--; if (pin_len > 12) return SC_ERROR_INVALID_ARGUMENTS; + for (i = 0; i < pin_len; i++) { + if (pin->data[i] < '0' || pin->data[i] > '9') + return SC_ERROR_INVALID_ARGUMENTS; + } buf[0] = 0x20 | pin_len; buf++; buflen--;