Mercurial > hg
diff mcabber/mcabber/utils.c @ 2197:189abf03ef24
Fix fingerprint management
(Reported by Sven Gaerner in issue #134)
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Sun, 11 Oct 2015 17:17:35 +0200 |
parents | 87244845fd9c |
children | 1591518a33b9 |
line wrap: on
line diff
--- a/mcabber/mcabber/utils.c Wed Oct 07 21:58:38 2015 +0200 +++ b/mcabber/mcabber/utils.c Sun Oct 11 17:17:35 2015 +0200 @@ -155,26 +155,35 @@ return g_strdup(fname); } -void fingerprint_to_hex(const unsigned char *fpr, char hex[49]) +void fingerprint_to_hex(const unsigned char *fpr, char hex[48]) { int i; char *p; + hex[0] = 0; + if (!fpr) return; + for (p = hex, i = 0; i < 15; i++, p+=3) - g_sprintf(p, "%02X:", fpr[i]); - g_sprintf(p, "%02X", fpr[i]); - hex[48] = '\0'; + g_snprintf(p, 4, "%02X:", fpr[i]); + g_snprintf(p, 3, "%02X", fpr[i]); } -gboolean hex_to_fingerprint(const char *hex, char fpr[16]) +gboolean hex_to_fingerprint(const char *hex, char fpr[17]) { int i; - char *p; + const char *p; + fpr[0] = 0; if (strlen(hex) != 47) return FALSE; - for (i = 0, p = (char*)hex; *p && *(p+1); i++, p += 3) - fpr[i] = (char) g_ascii_strtoull (p, NULL, 16); + for (i = 0, p = hex; *p && *(p+1); i++, p += 3) { + if (*(p+2) && (*(p+2) != ':')) { + fpr[i] = 0; + return FALSE; + } + fpr[i] = (char)g_ascii_strtoull(p, NULL, 16); + } + fpr[i] = 0; return TRUE; }