diff options
author | James Booth <boothj5@gmail.com> | 2013-03-08 00:17:31 +0000 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2013-03-08 00:17:31 +0000 |
commit | c8088bea417d0e039c1d84e96e796b6e0f684d3d (patch) | |
tree | f96f50afe223a123a1a414a90089201bceebfe85 /src/xmpp | |
parent | 5c475d630a1c9867227bd57a0e2ee0a4f43bafa8 (diff) | |
download | profani-tty-c8088bea417d0e039c1d84e96e796b6e0f684d3d.tar.gz |
Tidied fix for id attributes that cause a segfault
fixes #151
Diffstat (limited to 'src/xmpp')
-rw-r--r-- | src/xmpp/iq.c | 5 | ||||
-rw-r--r-- | src/xmpp/presence.c | 21 |
2 files changed, 17 insertions, 9 deletions
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."); |