aboutsummaryrefslogtreecommitdiff
path: root/src/QuickMedia.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2022-11-08 22:05:03 +0100
committerdec05eba <dec05eba@protonmail.com>2022-11-08 22:05:03 +0100
commitdeb32bded40c4c46ce57c729c303edcb1915458b (patch)
tree66bac3d9ccf67e30fa21f7682ab8f21f98c1af1c /src/QuickMedia.cpp
parentd8cccb74066545c534bb9952f51e441d4aba2c66 (diff)
html parser: fix possible endless loop. Fixes matrix chat where parsing non-html as html happened
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r--src/QuickMedia.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp
index 72df6eb..c9c7603 100644
--- a/src/QuickMedia.cpp
+++ b/src/QuickMedia.cpp
@@ -5319,10 +5319,17 @@ namespace QuickMedia {
return load_cached_related_embedded_item(body_item, message, me.get(), current_room->get_user_display_name(me), me->user_id, message_body_items);
}
+ static std::string message_to_qm_text(Message *message) {
+ if(message->body_is_formatted)
+ return formatted_text_to_qm_text(message->body.c_str(), message->body.size(), true);
+ else
+ return message->body;
+ }
+
static std::shared_ptr<BodyItem> message_to_body_item(RoomData *room, Message *message, const std::string &my_display_name, const std::string &my_user_id) {
auto body_item = BodyItem::create("");
body_item->set_author(extract_first_line_remove_newline_elipses(room->get_user_display_name(message->user), AUTHOR_MAX_LENGTH));
- body_item->set_description(strip(formatted_text_to_qm_text(message->body.c_str(), message->body.size(), true)));
+ body_item->set_description(strip(message_to_qm_text(message)));
body_item->set_timestamp(message->timestamp);
if(!message->thumbnail_url.empty()) {
body_item->thumbnail_url = message->thumbnail_url;
@@ -5652,7 +5659,7 @@ namespace QuickMedia {
// TODO: Properly check reply message objects for mention of user instead of message data, but only when synapse fixes that notifications
// are not triggered by reply to a message with our display name/user id.
Message *edited_message_ref = static_cast<Message*>(body_item->userdata);
- std::string qm_formatted_text = formatted_text_to_qm_text(message->body.c_str(), message->body.size(), true);
+ std::string qm_formatted_text = message_to_qm_text(message.get());
body_item->set_description(std::move(qm_formatted_text));
if(message->user != me && message_contains_user_mention(message.get(), my_display_name, me->user_id))
@@ -6116,6 +6123,7 @@ namespace QuickMedia {
}
auto message = std::make_shared<Message>();
+ message->body_is_formatted = true;
message->user = matrix->get_me(current_room);
if(msgtype == "m.emote")
message->body = "*" + current_room->get_user_display_name(me) + "* " + matrix->body_to_formatted_body(current_room, text);