~singpolyma/biboumi

df765faab92f5fcbf05cc9316ba27b509158ce1c — Florent Le Coz 9 years ago 7c7da2c
Only call get_last_child() if the node has children

Explain that the behaviour is otherwise undefined, in the comment.
2 files changed, 4 insertions(+), 2 deletions(-)

M src/xmpp/xmpp_component.cpp
M src/xmpp/xmpp_stanza.hpp
M src/xmpp/xmpp_component.cpp => src/xmpp/xmpp_component.cpp +1 -1
@@ 380,7 380,7 @@ void XmppComponent::handle_message(const Stanza& stanza)
      // We consider this to be true, unless the error condition is
      // specified and is not in the kickable_errors set
      bool kickable_error = true;
      if (error)
      if (error && error->has_children())
        {
          const XmlNode* condition = error->get_last_child();
          if (kickable_errors.find(condition->get_name()) == kickable_errors.end())

M src/xmpp/xmpp_stanza.hpp => src/xmpp/xmpp_stanza.hpp +3 -1
@@ 77,7 77,9 @@ public:
  XmlNode* add_child(XmlNode* child);
  XmlNode* add_child(XmlNode&& child);
  /**
   * Returns the last of the children
   * Returns the last of the children. If the node doesn't have any child,
   * the behaviour is undefined. The user should make sure this is the case
   * by calling has_children() for example.
   */
  XmlNode* get_last_child() const;
  /**