[FIX] Fix unfreed value on renames

This commit is contained in:
LDA 2024-09-24 07:08:25 +02:00
commit 0f3253a385
2 changed files with 11 additions and 7 deletions

View file

@ -151,6 +151,8 @@ XMPPifyElement(HashMap *event, XMLElement *elem, XMPPFlags flags)
else if (StrEquals(elem->name, "a")) else if (StrEquals(elem->name, "a"))
{ {
char *href = HashMapGet(elem->attrs, "href"); char *href = HashMapGet(elem->attrs, "href");
/* TODO: Check if the element here is a Matrix.TO
* pointing to a Parsee user. */
Concat("("); Concat("(");
for (i = 0; i < ArraySize(elem->children); i++) for (i = 0; i < ArraySize(elem->children); i++)
{ {

View file

@ -34,7 +34,9 @@ LazyRegister(ParseeData *data, char *mxid, char *name)
ASSetName(data->config, mxid, name); ASSetName(data->config, mxid, name);
if (ref) if (ref)
{ {
HashMapSet(DbJson(ref), "name", JsonValueString(name)); JsonValueFree(HashMapSet(
DbJson(ref), "name", JsonValueString(name)
));
} }
} }
DbUnlock(data->db, ref); DbUnlock(data->db, ref);
@ -109,7 +111,8 @@ ProcessChatstates(ParseeData *args, XMLElement *stanza)
mroom_id = NULL; mroom_id = NULL;
from_matrix = NULL; from_matrix = NULL;
} }
if (XMLookForTKV(stanza, "paused", "xmlns", CHAT_STATES)) if (XMLookForTKV(stanza, "paused", "xmlns", CHAT_STATES) ||
XMLookForTKV(stanza, "inactive", "xmlns", CHAT_STATES))
{ {
char *latest = NULL; char *latest = NULL;
from_matrix = ParseeGetBridgedUser(args, stanza); from_matrix = ParseeGetBridgedUser(args, stanza);
@ -147,6 +150,7 @@ ProcessChatstates(ParseeData *args, XMLElement *stanza)
} }
#undef CHAT_STATES #undef CHAT_STATES
} }
static float static float
TimeElapsed(uint64_t *rectime, uint64_t v) TimeElapsed(uint64_t *rectime, uint64_t v)
{ {
@ -294,9 +298,6 @@ end_error:
PEPManagerHandle(thr->info->pep_manager, stanza); PEPManagerHandle(thr->info->pep_manager, stanza);
Log(LOG_DEBUG, "PEP management: %fs", Elapsed(rectime)); Log(LOG_DEBUG, "PEP management: %fs", Elapsed(rectime));
ProcessChatstates(args, stanza);
Log(LOG_DEBUG, "Chatstate management: %fs", Elapsed(rectime));
to = ParseeDecodeMXID(HashMapGet(stanza->attrs, "to")); to = ParseeDecodeMXID(HashMapGet(stanza->attrs, "to"));
decode_from = ParseeLookupJID(from); decode_from = ParseeLookupJID(from);
from_matrix = ParseeEncodeJID(args->config, decode_from, true); from_matrix = ParseeEncodeJID(args->config, decode_from, true);
@ -318,7 +319,6 @@ end_error:
LazyRegister(args, from_matrix, NULL); LazyRegister(args, from_matrix, NULL);
room = ASCreateDM(args->config, from_matrix, to); room = ASCreateDM(args->config, from_matrix, to);
mroom_id = StrDuplicate(room); mroom_id = StrDuplicate(room);
Log(LOG_DEBUG, "Creating a DM to '%s'(%s)...", to, mroom_id);
if (room) if (room)
{ {
room_ref = DbCreate(args->db, 3, "rooms", room, "data"); room_ref = DbCreate(args->db, 3, "rooms", room, "data");
@ -403,7 +403,6 @@ end_error:
{ {
content = MatrixCreateMedia(mxc, data->data, mime); content = MatrixCreateMedia(mxc, data->data, mime);
/* Yeah, no, I'm not modifying the media creation code. */
HashMapSet(content, HashMapSet(content,
"at.kappach.at.parsee.external", "at.kappach.at.parsee.external",
JsonValueString(oob_data->data) JsonValueString(oob_data->data)
@ -539,6 +538,9 @@ end_error:
} }
} }
ProcessChatstates(args, stanza);
Log(LOG_DEBUG, "Chatstate management: %fs", Elapsed(rectime));
end: end:
Free(mroom_id); Free(mroom_id);
mroom_id = NULL; mroom_id = NULL;