From 0079d836f3e51f1c4b9e67dee026217a7c13cc47 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Fri, 8 Mar 2019 22:02:30 +0100 Subject: [PATCH] pkcs11: truncate oversized labels with '...' --- src/pkcs11/misc.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/pkcs11/misc.c b/src/pkcs11/misc.c index 9408080b..c3f5bb4e 100644 --- a/src/pkcs11/misc.c +++ b/src/pkcs11/misc.c @@ -43,16 +43,26 @@ static struct sc_to_cryptoki_error_conversion sc_to_cryptoki_error_map[] = { void strcpy_bp(u8 * dst, const char *src, size_t dstsize) { - size_t c; - - if (!dst || !src || !dstsize) + if (!dst || !dstsize) return; memset((char *)dst, ' ', dstsize); - c = strlen(src) > dstsize ? dstsize : strlen(src); + if (src) { + size_t src_len = strlen(src); - memcpy((char *)dst, src, c); + if (src_len > dstsize) { + /* string will be truncated */ + memcpy((char *)dst, src, dstsize); + if (dstsize > 3) { + /* show truncation with '...' */ + /* FIXME avoid breaking an UTF-8 character on multiple bytes */ + memset((char *)dst + dstsize - 3, '.', 3); + } + } else { + memcpy((char *)dst, src, src_len); + } + } }