public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Florian Schmaus" <flow@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: net-im/biboumi/, net-im/biboumi/files/
Date: Mon, 14 Mar 2022 11:28:18 +0000 (UTC)	[thread overview]
Message-ID: <1647256975.d7d34d7858864fd5d350e5de430656f82b3ccc59.flow@gentoo> (raw)

commit:     d7d34d7858864fd5d350e5de430656f82b3ccc59
Author:     Florian Schmaus <flow <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 14 11:22:12 2022 +0000
Commit:     Florian Schmaus <flow <AT> gentoo <DOT> org>
CommitDate: Mon Mar 14 11:22:55 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d7d34d78

net-im/biboumi: apply official fix for expact issue

Signed-off-by: Florian Schmaus <flow <AT> gentoo.org>

 ...biboumi-9.0-r3.ebuild => biboumi-9.0-r4.ebuild} |   2 +-
 ...t-use-as-a-namespace-separator-with-expat.patch | 301 +++++++++++++++++++++
 .../biboumi-9.0-fix-namespace-separator.patch      |  57 ----
 3 files changed, 302 insertions(+), 58 deletions(-)

diff --git a/net-im/biboumi/biboumi-9.0-r3.ebuild b/net-im/biboumi/biboumi-9.0-r4.ebuild
similarity index 96%
rename from net-im/biboumi/biboumi-9.0-r3.ebuild
rename to net-im/biboumi/biboumi-9.0-r4.ebuild
index 9f6fa3b33906..2c45760b3892 100644
--- a/net-im/biboumi/biboumi-9.0-r3.ebuild
+++ b/net-im/biboumi/biboumi-9.0-r4.ebuild
@@ -44,7 +44,7 @@ S="${WORKDIR}/${PN}-${MY_PV}"
 DOCS=( README.rst CHANGELOG.rst doc/user.rst )
 
 PATCHES=(
-	"${FILESDIR}/${PN}-9.0-fix-namespace-separator.patch"
+	"${FILESDIR}/${PN}-9.0-do-not-use-as-a-namespace-separator-with-expat.patch"
 	"${FILESDIR}/${PN}-9.0-use-system-catch2.patch"
 )
 

diff --git a/net-im/biboumi/files/biboumi-9.0-do-not-use-as-a-namespace-separator-with-expat.patch b/net-im/biboumi/files/biboumi-9.0-do-not-use-as-a-namespace-separator-with-expat.patch
new file mode 100644
index 000000000000..f82cbae81928
--- /dev/null
+++ b/net-im/biboumi/files/biboumi-9.0-do-not-use-as-a-namespace-separator-with-expat.patch
@@ -0,0 +1,301 @@
+From 0061298dd0945f7f67e7fa340c6649b179c804d5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?louiz=E2=80=99?= <louiz@louiz.org>
+Date: Thu, 10 Mar 2022 23:23:47 +0100
+Subject: [PATCH] Do not use ':' as a namespace separator with expat
+
+Instead use \1, and build our own nodes by explicitely separating the
+namespace and the node name.
+---
+ src/xmpp/adhoc_command.cpp          |  6 +++---
+ src/xmpp/adhoc_commands_handler.cpp | 12 ++++++------
+ src/xmpp/biboumi_adhoc_commands.cpp | 28 ++++++++++++++--------------
+ src/xmpp/xmpp_component.cpp         |  2 +-
+ src/xmpp/xmpp_parser.cpp            |  2 +-
+ src/xmpp/xmpp_parser.hpp            |  4 ++--
+ src/xmpp/xmpp_stanza.cpp            | 14 +++++++++++++-
+ src/xmpp/xmpp_stanza.hpp            |  6 ++++++
+ tests/xmpp.cpp                      |  2 ++
+ 9 files changed, 48 insertions(+), 28 deletions(-)
+
+diff --git a/src/xmpp/adhoc_command.cpp b/src/xmpp/adhoc_command.cpp
+index fbf4ce200b82..f8c8e4f146d6 100644
+--- a/src/xmpp/adhoc_command.cpp
++++ b/src/xmpp/adhoc_command.cpp
+@@ -26,7 +26,7 @@ void PingStep1(XmppComponent&, AdhocSession&, XmlNode& command_node)
+ 
+ void HelloStep1(XmppComponent&, AdhocSession&, XmlNode& command_node)
+ {
+-  XmlSubNode x(command_node, "jabber:x:data:x");
++  XmlSubNode x(command_node, "jabber:x:data", "x");
+   x["type"] = "form";
+   XmlSubNode title(x, "title");
+   title.set_inner("Configure your name.");
+@@ -65,9 +65,9 @@ void HelloStep2(XmppComponent&, AdhocSession& session, XmlNode& command_node)
+         }
+     }
+   command_node.delete_all_children();
+-  XmlSubNode error(command_node, ADHOC_NS":error");
++  XmlSubNode error(command_node, ADHOC_NS, "error");
+   error["type"] = "modify";
+-  XmlSubNode condition(error, STANZA_NS":bad-request");
++  XmlSubNode condition(error, STANZA_NS, "bad-request");
+   session.terminate();
+ }
+ 
+diff --git a/src/xmpp/adhoc_commands_handler.cpp b/src/xmpp/adhoc_commands_handler.cpp
+index ff4c1e5506fb..7a84b2e11a45 100644
+--- a/src/xmpp/adhoc_commands_handler.cpp
++++ b/src/xmpp/adhoc_commands_handler.cpp
+@@ -36,16 +36,16 @@ XmlNode AdhocCommandsHandler::handle_request(const std::string& executor_jid, co
+   auto command_it = this->commands.find(node);
+   if (command_it == this->commands.end())
+     {
+-      XmlSubNode error(command_node, ADHOC_NS":error");
++      XmlSubNode error(command_node, ADHOC_NS, "error");
+       error["type"] = "cancel";
+-      XmlSubNode condition(error, STANZA_NS":item-not-found");
++      XmlSubNode condition(error, STANZA_NS, "item-not-found");
+     }
+   else if (command_it->second.is_admin_only() &&
+            !Config::is_in_list("admin", jid.bare()))
+     {
+-      XmlSubNode error(command_node, ADHOC_NS":error");
++      XmlSubNode error(command_node, ADHOC_NS, "error");
+       error["type"] = "cancel";
+-      XmlSubNode condition(error, STANZA_NS":forbidden");
++      XmlSubNode condition(error, STANZA_NS, "forbidden");
+     }
+   else
+     {
+@@ -94,9 +94,9 @@ XmlNode AdhocCommandsHandler::handle_request(const std::string& executor_jid, co
+         }
+       else                      // unsupported action
+         {
+-          XmlSubNode error(command_node, ADHOC_NS":error");
++          XmlSubNode error(command_node, ADHOC_NS, "error");
+           error["type"] = "modify";
+-          XmlSubNode condition(error, STANZA_NS":bad-request");
++          XmlSubNode condition(error, STANZA_NS, "bad-request");
+         }
+     }
+   return command_node;
+diff --git a/src/xmpp/biboumi_adhoc_commands.cpp b/src/xmpp/biboumi_adhoc_commands.cpp
+index 792955c37ec7..aea316d64042 100644
+--- a/src/xmpp/biboumi_adhoc_commands.cpp
++++ b/src/xmpp/biboumi_adhoc_commands.cpp
+@@ -34,7 +34,7 @@ void DisconnectUserStep1(XmppComponent& xmpp_component, AdhocSession&, XmlNode&
+ {
+   auto& biboumi_component = dynamic_cast<BiboumiComponent&>(xmpp_component);
+ 
+-  XmlSubNode x(command_node, "jabber:x:data:x");
++  XmlSubNode x(command_node, "jabber:x:data", "x");
+   x["type"] = "form";
+   XmlSubNode title(x, "title");
+   title.set_inner("Disconnect a user from the gateway");
+@@ -108,9 +108,9 @@ void DisconnectUserStep2(XmppComponent& xmpp_component, AdhocSession& session, X
+           return;
+         }
+     }
+-  XmlSubNode error(command_node, ADHOC_NS":error");
++  XmlSubNode error(command_node, ADHOC_NS, "error");
+   error["type"] = "modify";
+-  XmlSubNode condition(error, STANZA_NS":bad-request");
++  XmlSubNode condition(error, STANZA_NS, "bad-request");
+   session.terminate();
+ }
+ 
+@@ -124,7 +124,7 @@ void ConfigureGlobalStep1(XmppComponent&, AdhocSession& session, XmlNode& comman
+   auto options = Database::get_global_options(owner.bare());
+ 
+   command_node.delete_all_children();
+-  XmlSubNode x(command_node, "jabber:x:data:x");
++  XmlSubNode x(command_node, "jabber:x:data", "x");
+   x["type"] = "form";
+   XmlSubNode title(x, "title");
+   title.set_inner("Configure some global default settings.");
+@@ -220,9 +220,9 @@ void ConfigureGlobalStep2(XmppComponent& xmpp_component, AdhocSession& session,
+       note.set_inner("Configuration successfully applied.");
+       return;
+     }
+-  XmlSubNode error(command_node, ADHOC_NS":error");
++  XmlSubNode error(command_node, ADHOC_NS, "error");
+   error["type"] = "modify";
+-  XmlSubNode condition(error, STANZA_NS":bad-request");
++  XmlSubNode condition(error, STANZA_NS, "bad-request");
+   session.terminate();
+ }
+ 
+@@ -238,7 +238,7 @@ void ConfigureIrcServerStep1(XmppComponent&, AdhocSession& session, XmlNode& com
+   auto commands = Database::get_after_connection_commands(options);
+ 
+   command_node.delete_all_children();
+-  XmlSubNode x(command_node, "jabber:x:data:x");
++  XmlSubNode x(command_node, "jabber:x:data", "x");
+   x["type"] = "form";
+   XmlSubNode title(x, "title");
+   title.set_inner("Configure the IRC server " + server_domain);
+@@ -565,9 +565,9 @@ void ConfigureIrcServerStep2(XmppComponent& xmpp_component, AdhocSession& sessio
+       note.set_inner("Configuration successfully applied.");
+       return;
+     }
+-  XmlSubNode error(command_node, ADHOC_NS":error");
++  XmlSubNode error(command_node, ADHOC_NS, "error");
+   error["type"] = "modify";
+-  XmlSubNode condition(error, STANZA_NS":bad-request");
++  XmlSubNode condition(error, STANZA_NS, "bad-request");
+   session.terminate();
+ }
+ 
+@@ -586,7 +586,7 @@ void insert_irc_channel_configuration_form(XmlNode& node, const Jid& requester,
+   auto options = Database::get_irc_channel_options_with_server_default(requester.local + "@" + requester.domain,
+                                                                        iid.get_server(), iid.get_local());
+   node.delete_all_children();
+-  XmlSubNode x(node, "jabber:x:data:x");
++  XmlSubNode x(node, "jabber:x:data", "x");
+   x["type"] = "form";
+   XmlSubNode title(x, "title");
+   title.set_inner("Configure the IRC channel " + iid.get_local() + " on server " + iid.get_server());
+@@ -671,9 +671,9 @@ void ConfigureIrcChannelStep2(XmppComponent& xmpp_component, AdhocSession& sessi
+     }
+   else
+     {
+-      XmlSubNode error(command_node, ADHOC_NS":error");
++      XmlSubNode error(command_node, ADHOC_NS, "error");
+       error["type"] = "modify";
+-      XmlSubNode condition(error, STANZA_NS":bad-request");
++      XmlSubNode condition(error, STANZA_NS, "bad-request");
+       session.terminate();
+     }
+ }
+@@ -749,7 +749,7 @@ void DisconnectUserFromServerStep1(XmppComponent& xmpp_component, AdhocSession&
+     { // Send a form to select the user to disconnect
+       auto& biboumi_component = dynamic_cast<BiboumiComponent&>(xmpp_component);
+ 
+-      XmlSubNode x(command_node, "jabber:x:data:x");
++      XmlSubNode x(command_node, "jabber:x:data", "x");
+       x["type"] = "form";
+       XmlSubNode title(x, "title");
+       title.set_inner("Disconnect a user from selected IRC servers");
+@@ -794,7 +794,7 @@ void DisconnectUserFromServerStep2(XmppComponent& xmpp_component, AdhocSession&
+   command_node.delete_all_children();
+   auto& biboumi_component = dynamic_cast<BiboumiComponent&>(xmpp_component);
+ 
+-  XmlSubNode x(command_node, "jabber:x:data:x");
++  XmlSubNode x(command_node, "jabber:x:data", "x");
+   x["type"] = "form";
+   XmlSubNode title(x, "title");
+   title.set_inner("Disconnect a user from selected IRC servers");
+diff --git a/src/xmpp/xmpp_component.cpp b/src/xmpp/xmpp_component.cpp
+index de9a7a631be6..62a98ce3bb2c 100644
+--- a/src/xmpp/xmpp_component.cpp
++++ b/src/xmpp/xmpp_component.cpp
+@@ -175,7 +175,7 @@ void XmppComponent::on_stanza(const Stanza& stanza)
+ 
+ void XmppComponent::send_stream_error(const std::string& name, const std::string& explanation)
+ {
+-  Stanza node("stream:error");
++  Stanza node("stream", "error");
+   {
+     XmlSubNode error(node, name);
+     error["xmlns"] = STREAM_NS;
+diff --git a/src/xmpp/xmpp_parser.cpp b/src/xmpp/xmpp_parser.cpp
+index 781fe4cd94b0..1f25fa6f982b 100644
+--- a/src/xmpp/xmpp_parser.cpp
++++ b/src/xmpp/xmpp_parser.cpp
+@@ -38,7 +38,7 @@ XmppParser::XmppParser():
+ void XmppParser::init_xml_parser()
+ {
+   // Create the expat parser
+-  this->parser = XML_ParserCreateNS("UTF-8", ':');
++  this->parser = XML_ParserCreateNS("UTF-8", '\1');
+   XML_SetUserData(this->parser, static_cast<void*>(this));
+ 
+   // Install Expat handlers
+diff --git a/src/xmpp/xmpp_parser.hpp b/src/xmpp/xmpp_parser.hpp
+index ec42f9a326e1..1e5e4e55a875 100644
+--- a/src/xmpp/xmpp_parser.hpp
++++ b/src/xmpp/xmpp_parser.hpp
+@@ -18,9 +18,9 @@
+  * stanza is reasonnably short.
+  *
+  * The element names generated by expat contain the namespace of the
+- * element, a colon (':') and then the actual name of the element.  To get
++ * element, a \1 separator and then the actual name of the element.  To get
+  * an element "x" with a namespace of "http://jabber.org/protocol/muc", you
+- * just look for an XmlNode named "http://jabber.org/protocol/muc:x"
++ * just look for an XmlNode named "http://jabber.org/protocol/muc\1x"
+  *
+  * TODO: enforce the size-limit for the stanza (limit the number of childs
+  * it can contain). For example forbid the parser going further than level
+diff --git a/src/xmpp/xmpp_stanza.cpp b/src/xmpp/xmpp_stanza.cpp
+index 435f33313b09..0103dd71a357 100644
+--- a/src/xmpp/xmpp_stanza.cpp
++++ b/src/xmpp/xmpp_stanza.cpp
+@@ -52,7 +52,7 @@ XmlNode::XmlNode(const std::string& name, XmlNode* parent):
+   parent(parent)
+ {
+   // split the namespace and the name
+-  auto n = name.rfind(':');
++  auto n = name.rfind('\1');
+   if (n == std::string::npos)
+     this->name = name;
+   else
+@@ -67,6 +67,18 @@ XmlNode::XmlNode(const std::string& name):
+ {
+ }
+ 
++XmlNode::XmlNode(const std::string& xmlns, const std::string& name, XmlNode* parent):
++    name(name),
++    parent(parent)
++{
++  this->attributes["xmlns"] = xmlns;
++}
++
++XmlNode::XmlNode(const std::string& xmlns, const std::string& name):
++    XmlNode(xmlns, name, nullptr)
++{
++}
++
+ void XmlNode::delete_all_children()
+ {
+   this->children.clear();
+diff --git a/src/xmpp/xmpp_stanza.hpp b/src/xmpp/xmpp_stanza.hpp
+index f4b394814e5b..a706337baca0 100644
+--- a/src/xmpp/xmpp_stanza.hpp
++++ b/src/xmpp/xmpp_stanza.hpp
+@@ -25,6 +25,8 @@ class XmlNode
+ public:
+   explicit XmlNode(const std::string& name, XmlNode* parent);
+   explicit XmlNode(const std::string& name);
++  explicit XmlNode(const std::string& xmlns, const std::string& name, XmlNode* parent);
++  explicit XmlNode(const std::string& xmlns, const std::string& name);
+   /**
+    * The copy constructor does not copy the parent attribute. The children
+    * nodes are all copied recursively.
+@@ -150,6 +152,10 @@ public:
+             XmlNode(name),
+             parent_to_add(parent_ref)
+     {}
++    XmlSubNode(XmlNode& parent_ref, const std::string& xmlns, const std::string& name):
++        XmlNode(xmlns, name),
++        parent_to_add(parent_ref)
++    {}
+ 
+     ~XmlSubNode()
+     {
+diff --git a/tests/xmpp.cpp b/tests/xmpp.cpp
+index 14c51daa460f..c49c2fda94ea 100644
+--- a/tests/xmpp.cpp
++++ b/tests/xmpp.cpp
+@@ -67,6 +67,8 @@ TEST_CASE("substanzas")
+       CHECK(!d.has_children());
+     }
+     CHECK(b.has_children());
++    XmlSubNode e(a, "namespace", "name");
++    CHECK(e.get_tag("xmlns") == "namespace");
+   }
+   CHECK(a.has_children());
+ }
+-- 
+2.34.1
+

diff --git a/net-im/biboumi/files/biboumi-9.0-fix-namespace-separator.patch b/net-im/biboumi/files/biboumi-9.0-fix-namespace-separator.patch
deleted file mode 100644
index 507382f66f67..000000000000
--- a/net-im/biboumi/files/biboumi-9.0-fix-namespace-separator.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 380abf66e930f5c4ead591014f31624d80a3151c Mon Sep 17 00:00:00 2001
-From: Florian Schmaus <flo@geekplace.eu>
-Date: Sat, 26 Feb 2022 21:41:34 +0100
-Subject: [PATCH] Fix bad namespace separator
-
-Fixes: https://lab.louiz.org/louiz/biboumi/-/issues/3465
----
- src/xmpp/xmpp_parser.cpp | 2 +-
- src/xmpp/xmpp_parser.hpp | 4 ++--
- src/xmpp/xmpp_stanza.cpp | 2 +-
- 3 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/xmpp/xmpp_parser.cpp b/src/xmpp/xmpp_parser.cpp
-index 781fe4cd94b0..1f25fa6f982b 100644
---- a/src/xmpp/xmpp_parser.cpp
-+++ b/src/xmpp/xmpp_parser.cpp
-@@ -38,7 +38,7 @@ XmppParser::XmppParser():
- void XmppParser::init_xml_parser()
- {
-   // Create the expat parser
--  this->parser = XML_ParserCreateNS("UTF-8", ':');
-+  this->parser = XML_ParserCreateNS("UTF-8", '\1');
-   XML_SetUserData(this->parser, static_cast<void*>(this));
- 
-   // Install Expat handlers
-diff --git a/src/xmpp/xmpp_parser.hpp b/src/xmpp/xmpp_parser.hpp
-index ec42f9a326e1..1e5e4e55a875 100644
---- a/src/xmpp/xmpp_parser.hpp
-+++ b/src/xmpp/xmpp_parser.hpp
-@@ -18,9 +18,9 @@
-  * stanza is reasonnably short.
-  *
-  * The element names generated by expat contain the namespace of the
-- * element, a colon (':') and then the actual name of the element.  To get
-+ * element, a \1 separator and then the actual name of the element.  To get
-  * an element "x" with a namespace of "http://jabber.org/protocol/muc", you
-- * just look for an XmlNode named "http://jabber.org/protocol/muc:x"
-+ * just look for an XmlNode named "http://jabber.org/protocol/muc\1x"
-  *
-  * TODO: enforce the size-limit for the stanza (limit the number of childs
-  * it can contain). For example forbid the parser going further than level
-diff --git a/src/xmpp/xmpp_stanza.cpp b/src/xmpp/xmpp_stanza.cpp
-index 435f33313b09..bd668cf2f28d 100644
---- a/src/xmpp/xmpp_stanza.cpp
-+++ b/src/xmpp/xmpp_stanza.cpp
-@@ -52,7 +52,7 @@ XmlNode::XmlNode(const std::string& name, XmlNode* parent):
-   parent(parent)
- {
-   // split the namespace and the name
--  auto n = name.rfind(':');
-+  auto n = name.rfind('\1');
-   if (n == std::string::npos)
-     this->name = name;
-   else
--- 
-2.34.1
-


             reply	other threads:[~2022-03-14 11:28 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-14 11:28 Florian Schmaus [this message]
  -- strict thread matches above, loose matches on Subject: below --
2022-02-27 10:27 [gentoo-commits] repo/gentoo:master commit in: net-im/biboumi/, net-im/biboumi/files/ Florian Schmaus
2022-02-01 10:36 Florian Schmaus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1647256975.d7d34d7858864fd5d350e5de430656f82b3ccc59.flow@gentoo \
    --to=flow@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox