From c8088bea417d0e039c1d84e96e796b6e0f684d3d Mon Sep 17 00:00:00 2001 From: James Booth Date: Fri, 8 Mar 2013 00:17:31 +0000 Subject: Tidied fix for id attributes that cause a segfault fixes #151 --- src/ui/windows.c | 3 +++ src/xmpp/iq.c | 5 +++++ src/xmpp/presence.c | 21 ++++++++++++--------- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/ui/windows.c b/src/ui/windows.c index 2ed2e902..d98f1091 100644 --- a/src/ui/windows.c +++ b/src/ui/windows.c @@ -1213,6 +1213,7 @@ cons_show_caps(const char * const contact, Resource *resource) wprintw(win, ":\n"); if (resource->caps_str != NULL) { + log_debug("Getting caps, caps_str: %s", resource->caps_str); Capabilities *caps = caps_get(resource->caps_str); if (caps != NULL) { // show identity @@ -1268,6 +1269,8 @@ cons_show_caps(const char * const contact, Resource *resource) } } } + } else { + log_debug("No caps string found in resource"); } if (current_index == 0) { diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index 4858482c..c587d918 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -350,6 +350,7 @@ _iq_handle_discoinfo_result(xmpp_conn_t * const conn, xmpp_stanza_t * const stan // xep-0115 if (g_strcmp0(id, "disco") == 0) { + log_debug("xep-0115 supported capabilities"); caps_key = strdup(node); // validate sha1 @@ -371,7 +372,9 @@ _iq_handle_discoinfo_result(xmpp_conn_t * const conn, xmpp_stanza_t * const stan // non supported hash, or legacy caps } else { + log_debug("Unsupported hash, or legacy capabilities"); caps_key = strdup(id + 6); + log_debug("Caps key: %s", caps_key); } // already cached @@ -380,6 +383,8 @@ _iq_handle_discoinfo_result(xmpp_conn_t * const conn, xmpp_stanza_t * const stan return 1; } + log_debug("Client info not cached"); + DataForm *form = NULL; FormField *formField = NULL; diff --git a/src/xmpp/presence.c b/src/xmpp/presence.c index 311c3282..8c5240e6 100644 --- a/src/xmpp/presence.c +++ b/src/xmpp/presence.c @@ -465,9 +465,6 @@ _get_caps_key(xmpp_stanza_t * const stanza) char *caps_key = NULL; char *node = NULL; char *from = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM); - guint from_hash = g_str_hash(from); - char from_hash_str[100]; - g_sprintf(from_hash_str, "%d", from_hash); if (stanza_contains_caps(stanza)) { log_debug("Presence contains capabilities."); @@ -501,12 +498,15 @@ _get_caps_key(xmpp_stanza_t * const stanza) } else { log_debug("Hash type unsupported."); node = stanza_get_caps_str(stanza); - caps_key = from_hash_str; + guint from_hash = g_str_hash(from); + char from_hash_str[9]; + g_sprintf(from_hash_str, "%08x", from_hash); + caps_key = strdup(from_hash_str); if (node != NULL) { log_debug("Node string: %s.", node); if (!caps_contains(caps_key)) { - log_debug("Capabilities not cached for '%s', sending discovery IQ.", caps_key); + log_debug("Capabilities not cached for '%s', sending discovery IQ.", from); GString *id = g_string_new("disco_"); g_string_append(id, from_hash_str); xmpp_stanza_t *iq = stanza_create_disco_iq(ctx, id->str, from, node); @@ -514,7 +514,7 @@ _get_caps_key(xmpp_stanza_t * const stanza) xmpp_stanza_release(iq); g_string_free(id, TRUE); } else { - log_debug("Capabilities already cached, for %s", caps_key); + log_debug("Capabilities already cached, for %s", from); } } else { log_debug("No node string, not sending discovery IQ."); @@ -527,12 +527,15 @@ _get_caps_key(xmpp_stanza_t * const stanza) } else { log_debug("No hash type, using legacy capabilities."); node = stanza_get_caps_str(stanza); - caps_key = from_hash_str; + guint from_hash = g_str_hash(from); + char from_hash_str[9]; + g_sprintf(from_hash_str, "%08x", from_hash); + caps_key = strdup(from_hash_str); if (node != NULL) { log_debug("Node string: %s.", node); if (!caps_contains(caps_key)) { - log_debug("Capabilities not cached for '%s', sending discovery IQ.", caps_key); + log_debug("Capabilities not cached for '%s', sending discovery IQ.", from); GString *id = g_string_new("disco_"); g_string_append(id, from_hash_str); xmpp_stanza_t *iq = stanza_create_disco_iq(ctx, id->str, from, node); @@ -540,7 +543,7 @@ _get_caps_key(xmpp_stanza_t * const stanza) xmpp_stanza_release(iq); g_string_free(id, TRUE); } else { - log_debug("Capabilities already cached, for %s", caps_key); + log_debug("Capabilities already cached, for %s", from); } } else { log_debug("No node string, not sending discovery IQ."); -- cgit 1.4.1-2-gfad0