From 9e1dd0abe1f554674a14a8768c80effa456758ef Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Sun, 13 May 2018 01:24:23 -0700 Subject: [PATCH] modules/client/rooms/messages: Count filter misses w/ conf limit; fix alloc size. --- modules/client/rooms/messages.cc | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/modules/client/rooms/messages.cc b/modules/client/rooms/messages.cc index 2583aef51..7fd973588 100644 --- a/modules/client/rooms/messages.cc +++ b/modules/client/rooms/messages.cc @@ -22,6 +22,13 @@ struct pagination_tokens pagination_tokens(const resource::request &); }; +conf::item +max_filter_miss +{ + { "name", "ircd.client.rooms.messages.max_filter_miss" }, + { "default", 2048L }, +}; + resource::response get__messages(client &client, const resource::request &request, @@ -39,7 +46,7 @@ get__messages(client &client, const unique_buffer filter_buf { - size(filter_query) * 3 + size(filter_query) }; const json::object &filter_json @@ -92,7 +99,7 @@ get__messages(client &client, else if(it) ++it; - size_t count{0}; + size_t hit{0}, miss{0}; m::event::id::buf start, end; { json::stack::member chunk{ret, "chunk"}; @@ -111,10 +118,11 @@ get__messages(client &client, if(empty(filter_json) || match(filter, event)) { messages.append(event); - ++count; + ++hit; } + else ++miss; - if(count >= page.limit) + if(hit >= page.limit || miss >= size_t(max_filter_miss)) { if(page.dir == 'b') end = at<"event_id"_>(event);