diff -up silc-toolkit-1.1.5/lib/silcutil/silcutil.c.bufflow silc-toolkit-1.1.5/lib/silcutil/silcutil.c --- silc-toolkit-1.1.5/lib/silcutil/silcutil.c.bufflow 2008-01-07 10:12:59.000000000 -0500 +++ silc-toolkit-1.1.5/lib/silcutil/silcutil.c 2008-01-07 10:17:25.000000000 -0500 @@ -468,19 +468,25 @@ SilcBool silc_hash_public_key_compare(vo 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++) { - silc_snprintf(cp, sizeof(fingerprint), "%02X", data[i]); + silc_snprintf(cp, maxlen, "%02X", data[i]); cp += 2; + maxlen = 64 - (cp - fingerprint); - if ((i + 1) % 2 == 0) - silc_snprintf(cp++, sizeof(fingerprint), " "); + if ((i + 1) % 2 == 0 && maxlen > 0) + silc_snprintf(cp++, maxlen, " "); + maxlen = 64 - (cp - fingerprint); + + if ((i + 1) % 10 == 0 && maxlen > 0) + silc_snprintf(cp++, maxlen, " "); + maxlen = 64 - (cp - fingerprint); - if ((i + 1) % 10 == 0) - silc_snprintf(cp++, sizeof(fingerprint), " "); + if (maxlen <= 0) + break; } i--; if ((i + 1) % 2 == 0)