--- seahorse-0.9.3.orig/libseahorse/seahorse-ssh-key.c +++ seahorse-0.9.3/libseahorse/seahorse-ssh-key.c @@ -374,28 +374,22 @@ GQuark seahorse_ssh_key_get_cannonical_id (const gchar *id) { - static guint x = strlen (SKEY_SSH_STR); - gchar *p, *hex; - guint l, off = 0; + gchar *hex, *canonical_id = g_malloc0 (9); + gint i, off, len = strlen (id); GQuark ret; - hex = g_strdup_printf ("%s:%s", SKEY_SSH_STR, id); - - /* Strip out all non alpha numeric chars */ - for(p = hex + x + 1; *p; p++) { - if (g_ascii_isalnum(*p)) - p[0 - off] = p[0]; - else - off++; + g_assert (len >= 8); + + /* Strip out all non alpha numeric chars and limit length to 8 */ + for (i = 0, off = 0; (i < len && off <= 8); i++) { + if (g_ascii_isalnum (id[i])) + canonical_id[off++] = id[i]; } - p[0 - off] = 0; - - /* Shorten where necessary */ - l = strlen (hex); - if (l > (8 + x + 1)) - hex[8 + x + 1] = 0; - + + hex = g_strdup_printf ("%s:%s", SKEY_SSH_STR, canonical_id); + ret = g_quark_from_string (hex); + g_free (canonical_id); g_free (hex); return ret;