diff -up silc-toolkit-1.0.2/lib/silcutil/silcutil.c.buff silc-toolkit-1.0.2/lib/silcutil/silcutil.c --- silc-toolkit-1.0.2/lib/silcutil/silcutil.c.buff 2008-01-06 12:35:15.000000000 -0500 +++ silc-toolkit-1.0.2/lib/silcutil/silcutil.c 2008-01-06 12:54:19.000000000 -0500 @@ -776,19 +776,25 @@ char *silc_client_chumode_char(SilcUInt3 char *silc_fingerprint(const unsigned char *data, SilcUInt32 data_len) { char fingerprint[64], *cp; - int i; + int i, maxlen = 64; memset(fingerprint, 0, sizeof(fingerprint)); cp = fingerprint; for (i = 0; i < data_len; i++) { - snprintf(cp, sizeof(fingerprint), "%02X", data[i]); + snprintf(cp, maxlen, "%02X", data[i]); cp += 2; + maxlen = 64 - (cp - fingerprint); - if ((i + 1) % 2 == 0) - snprintf(cp++, sizeof(fingerprint), " "); + if ((i + 1) % 2 == 0 && maxlen > 0) + snprintf(cp++, maxlen, " "); + maxlen = 64 - (cp - fingerprint); + + if ((i + 1) % 10 == 0 && maxlen > 0) + snprintf(cp++, maxlen, " "); + maxlen = 64 - (cp - fingerprint); - if ((i + 1) % 10 == 0) - snprintf(cp++, sizeof(fingerprint), " "); + if (maxlen <= 0) + break; } i--; if ((i + 1) % 2 == 0)