Author: anthm Date: Thu Apr 26 10:38:40 2007 New Revision: 5019 Modified: freeswitch/trunk/libs/libdingaling/src/libdingaling.c Log: update Modified: freeswitch/trunk/libs/libdingaling/src/libdingaling.c ============================================================================== --- freeswitch/trunk/libs/libdingaling/src/libdingaling.c (original) +++ freeswitch/trunk/libs/libdingaling/src/libdingaling.c Thu Apr 26 10:38:40 2007 @@ -1716,18 +1716,19 @@ } } - +#define TLEN 8192 void ldl_handle_send_vcard(ldl_handle_t *handle, char *from, char *to, char *id, char *vcard) { - iks *vxml, *iq; + iks *vxml = NULL, *iq = NULL; int e = 0; - ldl_avatar_t *ap; + ldl_avatar_t *ap = NULL; + char *text = NULL; ap = ldl_get_avatar(handle, NULL, from); if (!vcard) { - char text[8192]; char *ext; + if (!ap) { return; } @@ -1737,8 +1738,8 @@ } else { ext = "png"; } - - snprintf(text, sizeof(text), + text = malloc(TLEN); + snprintf(text, TLEN, "<vCard xmlns='vcard-temp'><PHOTO><TYPE>image/%s</TYPE><BINVAL>%s</BINVAL></PHOTO></vCard>", ext, ap->base64 @@ -1753,12 +1754,12 @@ if (!(vxml = iks_tree(vcard, 0, &e))) { globals.logger(DL_LOG_ERR, "Parse returned error [%d]\n", e); - return; + goto fail; } if (!(iq = iks_new("iq"))) { globals.logger(DL_LOG_ERR, "Memory Error\n"); - return; + goto fail; } if (!iks_insert_attrib(iq, "to", to)) goto fail; @@ -1769,17 +1770,24 @@ if (!iks_insert_node(iq, vxml)) goto fail; apr_queue_push(handle->queue, iq); + iq = NULL; vxml = NULL; fail: + if (iq) { iks_delete(iq); } + if (vxml) { iks_delete(vxml); } + if (text) { + free(text); + } + } void ldl_handle_send_msg(ldl_handle_t *handle, char *from, char *to, char *subject, char *body)