From 492051663718a90d2c90703cfe4f17593d99c694 Mon Sep 17 00:00:00 2001 From: Volker Birk Date: Wed, 29 Jul 2020 10:44:19 +0200 Subject: [PATCH] decrypt_message() needs to use the cache --- message_cache.cc | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/message_cache.cc b/message_cache.cc index 695ffe5..5b2aff6 100644 --- a/message_cache.cc +++ b/message_cache.cc @@ -230,18 +230,44 @@ namespace pEp { if (!src || emptystr(src->id)) return PEP_ILLEGAL_VALUE; - PEP_STATUS status = ::decrypt_message(session, src, dst, keylist, + ::message *_msg; + { + std::lock_guard l(_mtx); + _msg = message_cache._cache.at(src->id).src; + } + + free(src->longmsg); + src->longmsg = _msg->longmsg; + _msg->longmsg = nullptr; + + free(src->longmsg_formatted); + src->longmsg_formatted = _msg->longmsg_formatted; + _msg->longmsg_formatted = nullptr; + + free_bloblist(src->attachments); + src->attachments = _msg->attachments; + _msg->attachments = nullptr; + + ::message *_dst = nullptr; + PEP_STATUS status = ::decrypt_message(session, src, &_dst, keylist, rating, flags); - ::message *_cpy = empty_message_copy(src); + _msg->longmsg = src->longmsg; + src->longmsg = nullptr; - ::message *_src = (::message *) malloc(sizeof(::message)); - ::memcpy(_src, src, sizeof(::message)); - ::memcpy(src, _cpy, sizeof(::message)); + _msg->longmsg_formatted = src->longmsg_formatted; + src->longmsg_formatted = nullptr; - ::message *_dst = *dst; + _msg->attachments = src->attachments; + src->attachments = nullptr; + *dst = empty_message_copy(_dst); + { + std::lock_guard l(_mtx); + ::free_message(message_cache._cache.at(src->id).dst); + message_cache._cache.at(src->id).dst = _dst; + } return status; }