~singpolyma/biboumi

f371d9ca46578a722d2ce0d4a88ea35f64dd1d1c — louiz’ 4 years ago 6e1af8b
xep-0106 escape the JIDs listed in a disco#items server query

fix #3325
2 files changed, 19 insertions(+), 1 deletions(-)

M src/xmpp/biboumi_component.cpp
M tests/end_to_end/__main__.py
M src/xmpp/biboumi_component.cpp => src/xmpp/biboumi_component.cpp +4 -1
@@ 7,6 7,7 @@
#include <xmpp/adhoc_command.hpp>
#include <xmpp/biboumi_adhoc_commands.hpp>
#include <bridge/list_element.hpp>
#include <utils/encoding.hpp>
#include <config/config.hpp>
#include <utils/time.hpp>
#include <xmpp/jid.hpp>


@@ 1010,7 1011,9 @@ void BiboumiComponent::send_iq_room_list_result(const std::string& id, const std
    for (auto it = begin; it != end; ++it)
      {
        XmlSubNode item(query, "item");
        item["jid"] = it->channel + "@" + this->served_hostname;
        std::string channel_name = it->channel;
        xep0106::encode(channel_name);
        item["jid"] = channel_name + "@" + this->served_hostname;
      }

    if ((rs_info.max >= 0 || !rs_info.after.empty() || !rs_info.before.empty()))

M tests/end_to_end/__main__.py => tests/end_to_end/__main__.py +15 -0
@@ 2254,6 2254,21 @@ if __name__ == '__main__':
                         "/iq/disco_items:query/disco_items:item[@jid='#bar%{irc_server_one}']"
                     ))
                 ]),
        Scenario("channel_list_escaping",
                 [
                     handshake_sequence(),

                     partial(send_stanza,
                             "<presence from='{jid_one}/{resource_one}' to='#true\\2ffalse%{irc_server_one}/{nick_one}' />"),
                     connection_sequence("irc.localhost", '{jid_one}/{resource_one}'),
                     partial(expect_stanza,
                             "/message/body[text()='Mode #true/false [+nt] by {irc_host_one}']"),
                     partial(expect_stanza,
                             ("/presence[@to='{jid_one}/{resource_one}'][@from='#true\\2ffalse%{irc_server_one}/{nick_one}']/muc_user:x/muc_user:item[@affiliation='admin'][@role='moderator']",
                             "/presence/muc_user:x/muc_user:status[@code='110']")
                             ),
                     partial(expect_stanza, "/message[@from='#true\\2ffalse%{irc_server_one}'][@type='groupchat']/subject[not(text())]"),
                 ]),
        Scenario("channel_list_with_rsm",
                 [
                     handshake_sequence(),