From 050c62f7dfa0b6d76c0c57fbc0e41efba5864079 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Sun, 5 Jun 2016 21:18:38 +0200 Subject: [PATCH] added parameter checking to `sc_right_trim` fixes conversion from 'size_t' to 'long', possible loss of data --- src/libopensc/sc.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/libopensc/sc.c b/src/libopensc/sc.c index b4db30d8..0dfe5c0e 100644 --- a/src/libopensc/sc.c +++ b/src/libopensc/sc.c @@ -126,15 +126,20 @@ int sc_bin_to_hex(const u8 *in, size_t in_len, char *out, size_t out_len, */ size_t sc_right_trim(u8 *buf, size_t len) { - long i; + size_t i; - for(i=len-1; i >=0; i--) { - if(!isprint(buf[i])) { - buf[i] = '\0'; - len--; - continue; + if (!buf) + return 0; + + if (len > 0) { + for(i = len-1; i > 0; i--) { + if(!isprint(buf[i])) { + buf[i] = '\0'; + len--; + continue; + } + break; } - break; } return len; }