From 17474bda0f3b0ecac0d0a9967a2ea79e3d35bad1 Mon Sep 17 00:00:00 2001 From: LDA Date: Thu, 3 Oct 2024 07:53:39 +0200 Subject: [PATCH] [FIX] (Try to) fix the memory leak --- src/MatrixEventHandler.c | 12 ++++++++++-- src/XMPPThread/Stanzas/IQ.c | 21 +++------------------ 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/MatrixEventHandler.c b/src/MatrixEventHandler.c index 9f601d5..cb86427 100644 --- a/src/MatrixEventHandler.c +++ b/src/MatrixEventHandler.c @@ -122,6 +122,7 @@ ParseeMemberHandler(ParseeData *data, HashMap *event) Free(avatar); Free(name); Free(muc); + avatar = NULL; /* TODO: XEP-0084 magic to advertise a new avatar if possible. */ } @@ -185,6 +186,7 @@ ParseeMemberHandler(ParseeData *data, HashMap *event) Free(full_jid); } Free(chat_id); + Free(avatar); Free(mime); Free(sha); Free(jid); @@ -424,7 +426,8 @@ ParseeMessageHandler(ParseeData *data, HashMap *event) } else { - char *name; + char *name, *mime = NULL, *sha = NULL; + char *avatar; /* Try to find the chat ID */ muc_id = ParseeGetMUCID(data, chat_id); if (!chat_id) @@ -434,11 +437,16 @@ ParseeMessageHandler(ParseeData *data, HashMap *event) /* TODO: Avoid using the AS endpoints */ name = ASGetName(data->config, id, m_sender); - Free(JoinMUC(data, event, encoded_from, muc_id, name, NULL)); + avatar = ASGetAvatar(data->config, id, sender); + ASGetMIMESHA(data->config, avatar, &mime, &sha); + Free(JoinMUC(data, event, encoded_from, muc_id, name, sha)); to = muc_id; + Free(sha); + Free(mime); Free(name); + Free(avatar); } if (reply_id) { diff --git a/src/XMPPThread/Stanzas/IQ.c b/src/XMPPThread/Stanzas/IQ.c index c2dc3a9..0f25c4c 100644 --- a/src/XMPPThread/Stanzas/IQ.c +++ b/src/XMPPThread/Stanzas/IQ.c @@ -49,7 +49,7 @@ TrimBase64(char *b64) XMLElement * GenerateAvatarData(ParseeData *data, char *mxid) { - char *mxc, *mime = NULL, *out = NULL, *b64 = NULL; + char *mxc = NULL, *mime = NULL, *out = NULL, *b64 = NULL; XMLElement *elem = NULL, *type, *binval; size_t len = 0; if (!data || !mxid) @@ -57,9 +57,10 @@ GenerateAvatarData(ParseeData *data, char *mxid) return NULL; } + /* TODO: Use the right room */ mxc = ASGetAvatar(data->config, NULL, mxid); - if (!ASGrab(data->config, mxc, &mime, &out, &len)) + if (!mxc || !ASGrab(data->config, mxc, &mime, &out, &len)) { goto end; } @@ -449,22 +450,6 @@ IQGet(ParseeData *args, XMLElement *stanza, XMPPThread *thr) char *mto_link = ParseeGenerateMTO(to_matrix); XMLAddAttr(vCard, "xmlns", "vcard-temp"); { - XMLElement *fn = CreateTagWithText( - "FN", name ? name : to_matrix - ); - XMLElement *nick = CreateTagWithText( - "NICKNAME", to_matrix - ); - XMLElement *url = CreateTagWithText( - "URL", mto_link - ); - - /* TODO: Maybe abstract the vCard code. */ - /* TODO: Make a function to just get a user's avatar - * automatically. */ - XMLAddChild(vCard, nick); - XMLAddChild(vCard, url); - XMLAddChild(vCard, fn); XMLAddChild(vCard, GenerateAvatarData(args, to_matrix)); Free(mto_link);