Mercurial > pidgin.yaz
comparison libpurple/protocols/jabber/jabber.c @ 18711:259f8635eeff
Fix a bunch of possible crashes in jabber when using slash commands in
a room that you've been kicked out of
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sun, 29 Jul 2007 06:10:24 +0000 |
parents | e3df2f61d03d |
children | 28a7c9dbbc2b 177552010f1d a75d01f3a98e 25517a27771d 536ee8e459ef |
comparison
equal
deleted
inserted
replaced
18710:bdb9c5c8673f | 18711:259f8635eeff |
---|---|
1616 | 1616 |
1617 static PurpleCmdRet jabber_cmd_chat_config(PurpleConversation *conv, | 1617 static PurpleCmdRet jabber_cmd_chat_config(PurpleConversation *conv, |
1618 const char *cmd, char **args, char **error, void *data) | 1618 const char *cmd, char **args, char **error, void *data) |
1619 { | 1619 { |
1620 JabberChat *chat = jabber_chat_find_by_conv(conv); | 1620 JabberChat *chat = jabber_chat_find_by_conv(conv); |
1621 | |
1622 if (!chat) | |
1623 return PURPLE_CMD_RET_FAILED; | |
1624 | |
1621 jabber_chat_request_room_configure(chat); | 1625 jabber_chat_request_room_configure(chat); |
1622 return PURPLE_CMD_RET_OK; | 1626 return PURPLE_CMD_RET_OK; |
1623 } | 1627 } |
1624 | 1628 |
1625 static PurpleCmdRet jabber_cmd_chat_register(PurpleConversation *conv, | 1629 static PurpleCmdRet jabber_cmd_chat_register(PurpleConversation *conv, |
1626 const char *cmd, char **args, char **error, void *data) | 1630 const char *cmd, char **args, char **error, void *data) |
1627 { | 1631 { |
1628 JabberChat *chat = jabber_chat_find_by_conv(conv); | 1632 JabberChat *chat = jabber_chat_find_by_conv(conv); |
1633 | |
1634 if (!chat) | |
1635 return PURPLE_CMD_RET_FAILED; | |
1636 | |
1629 jabber_chat_register(chat); | 1637 jabber_chat_register(chat); |
1630 return PURPLE_CMD_RET_OK; | 1638 return PURPLE_CMD_RET_OK; |
1631 } | 1639 } |
1632 | 1640 |
1633 static PurpleCmdRet jabber_cmd_chat_topic(PurpleConversation *conv, | 1641 static PurpleCmdRet jabber_cmd_chat_topic(PurpleConversation *conv, |
1634 const char *cmd, char **args, char **error, void *data) | 1642 const char *cmd, char **args, char **error, void *data) |
1635 { | 1643 { |
1636 JabberChat *chat = jabber_chat_find_by_conv(conv); | 1644 JabberChat *chat = jabber_chat_find_by_conv(conv); |
1645 | |
1646 if (!chat) | |
1647 return PURPLE_CMD_RET_FAILED; | |
1648 | |
1637 jabber_chat_change_topic(chat, args ? args[0] : NULL); | 1649 jabber_chat_change_topic(chat, args ? args[0] : NULL); |
1638 return PURPLE_CMD_RET_OK; | 1650 return PURPLE_CMD_RET_OK; |
1639 } | 1651 } |
1640 | 1652 |
1641 static PurpleCmdRet jabber_cmd_chat_nick(PurpleConversation *conv, | 1653 static PurpleCmdRet jabber_cmd_chat_nick(PurpleConversation *conv, |
1642 const char *cmd, char **args, char **error, void *data) | 1654 const char *cmd, char **args, char **error, void *data) |
1643 { | 1655 { |
1644 JabberChat *chat = jabber_chat_find_by_conv(conv); | 1656 JabberChat *chat = jabber_chat_find_by_conv(conv); |
1645 | 1657 |
1646 if(!args || !args[0]) | 1658 if(!chat || !args || !args[0]) |
1647 return PURPLE_CMD_RET_FAILED; | 1659 return PURPLE_CMD_RET_FAILED; |
1648 | 1660 |
1649 jabber_chat_change_nick(chat, args[0]); | 1661 jabber_chat_change_nick(chat, args[0]); |
1650 return PURPLE_CMD_RET_OK; | 1662 return PURPLE_CMD_RET_OK; |
1651 } | 1663 } |
1652 | 1664 |
1653 static PurpleCmdRet jabber_cmd_chat_part(PurpleConversation *conv, | 1665 static PurpleCmdRet jabber_cmd_chat_part(PurpleConversation *conv, |
1654 const char *cmd, char **args, char **error, void *data) | 1666 const char *cmd, char **args, char **error, void *data) |
1655 { | 1667 { |
1656 JabberChat *chat = jabber_chat_find_by_conv(conv); | 1668 JabberChat *chat = jabber_chat_find_by_conv(conv); |
1669 | |
1670 if (!chat) | |
1671 return PURPLE_CMD_RET_FAILED; | |
1672 | |
1657 jabber_chat_part(chat, args ? args[0] : NULL); | 1673 jabber_chat_part(chat, args ? args[0] : NULL); |
1658 return PURPLE_CMD_RET_OK; | 1674 return PURPLE_CMD_RET_OK; |
1659 } | 1675 } |
1660 | 1676 |
1661 static PurpleCmdRet jabber_cmd_chat_ban(PurpleConversation *conv, | 1677 static PurpleCmdRet jabber_cmd_chat_ban(PurpleConversation *conv, |
1662 const char *cmd, char **args, char **error, void *data) | 1678 const char *cmd, char **args, char **error, void *data) |
1663 { | 1679 { |
1664 JabberChat *chat = jabber_chat_find_by_conv(conv); | 1680 JabberChat *chat = jabber_chat_find_by_conv(conv); |
1665 | 1681 |
1666 if(!args || !args[0]) | 1682 if(!chat || !args || !args[0]) |
1667 return PURPLE_CMD_RET_FAILED; | 1683 return PURPLE_CMD_RET_FAILED; |
1668 | 1684 |
1669 if(!jabber_chat_ban_user(chat, args[0], args[1])) { | 1685 if(!jabber_chat_ban_user(chat, args[0], args[1])) { |
1670 *error = g_strdup_printf(_("Unable to ban user %s"), args[0]); | 1686 *error = g_strdup_printf(_("Unable to ban user %s"), args[0]); |
1671 return PURPLE_CMD_RET_FAILED; | 1687 return PURPLE_CMD_RET_FAILED; |
1677 static PurpleCmdRet jabber_cmd_chat_affiliate(PurpleConversation *conv, | 1693 static PurpleCmdRet jabber_cmd_chat_affiliate(PurpleConversation *conv, |
1678 const char *cmd, char **args, char **error, void *data) | 1694 const char *cmd, char **args, char **error, void *data) |
1679 { | 1695 { |
1680 JabberChat *chat = jabber_chat_find_by_conv(conv); | 1696 JabberChat *chat = jabber_chat_find_by_conv(conv); |
1681 | 1697 |
1682 if (!args || !args[0] || !args[1]) | 1698 if (!chat || !args || !args[0] || !args[1]) |
1683 return PURPLE_CMD_RET_FAILED; | 1699 return PURPLE_CMD_RET_FAILED; |
1684 | 1700 |
1685 if (strcmp(args[1], "owner") != 0 && | 1701 if (strcmp(args[1], "owner") != 0 && |
1686 strcmp(args[1], "admin") != 0 && | 1702 strcmp(args[1], "admin") != 0 && |
1687 strcmp(args[1], "member") != 0 && | 1703 strcmp(args[1], "member") != 0 && |
1702 static PurpleCmdRet jabber_cmd_chat_role(PurpleConversation *conv, | 1718 static PurpleCmdRet jabber_cmd_chat_role(PurpleConversation *conv, |
1703 const char *cmd, char **args, char **error, void *data) | 1719 const char *cmd, char **args, char **error, void *data) |
1704 { | 1720 { |
1705 JabberChat *chat; | 1721 JabberChat *chat; |
1706 | 1722 |
1707 if (!args || !args[0] || !args[1]) | 1723 if (!chat || !args || !args[0] || !args[1]) |
1708 return PURPLE_CMD_RET_FAILED; | 1724 return PURPLE_CMD_RET_FAILED; |
1709 | 1725 |
1710 if (strcmp(args[1], "moderator") != 0 && | 1726 if (strcmp(args[1], "moderator") != 0 && |
1711 strcmp(args[1], "participant") != 0 && | 1727 strcmp(args[1], "participant") != 0 && |
1712 strcmp(args[1], "visitor") != 0 && | 1728 strcmp(args[1], "visitor") != 0 && |
1743 const char *cmd, char **args, char **error, void *data) | 1759 const char *cmd, char **args, char **error, void *data) |
1744 { | 1760 { |
1745 JabberChat *chat = jabber_chat_find_by_conv(conv); | 1761 JabberChat *chat = jabber_chat_find_by_conv(conv); |
1746 GHashTable *components; | 1762 GHashTable *components; |
1747 | 1763 |
1748 if(!args || !args[0]) | 1764 if(!chat || !args || !args[0]) |
1749 return PURPLE_CMD_RET_FAILED; | 1765 return PURPLE_CMD_RET_FAILED; |
1750 | 1766 |
1751 components = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL); | 1767 components = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL); |
1752 | 1768 |
1753 g_hash_table_replace(components, "room", args[0]); | 1769 g_hash_table_replace(components, "room", args[0]); |
1765 static PurpleCmdRet jabber_cmd_chat_kick(PurpleConversation *conv, | 1781 static PurpleCmdRet jabber_cmd_chat_kick(PurpleConversation *conv, |
1766 const char *cmd, char **args, char **error, void *data) | 1782 const char *cmd, char **args, char **error, void *data) |
1767 { | 1783 { |
1768 JabberChat *chat = jabber_chat_find_by_conv(conv); | 1784 JabberChat *chat = jabber_chat_find_by_conv(conv); |
1769 | 1785 |
1770 if(!args || !args[0]) | 1786 if(!chat || !args || !args[0]) |
1771 return PURPLE_CMD_RET_FAILED; | 1787 return PURPLE_CMD_RET_FAILED; |
1772 | 1788 |
1773 if(!jabber_chat_kick_user(chat, args[0], args[1])) { | 1789 if(!jabber_chat_kick_user(chat, args[0], args[1])) { |
1774 *error = g_strdup_printf(_("Unable to kick user %s"), args[0]); | 1790 *error = g_strdup_printf(_("Unable to kick user %s"), args[0]); |
1775 return PURPLE_CMD_RET_FAILED; | 1791 return PURPLE_CMD_RET_FAILED; |
1781 static PurpleCmdRet jabber_cmd_chat_msg(PurpleConversation *conv, | 1797 static PurpleCmdRet jabber_cmd_chat_msg(PurpleConversation *conv, |
1782 const char *cmd, char **args, char **error, void *data) | 1798 const char *cmd, char **args, char **error, void *data) |
1783 { | 1799 { |
1784 JabberChat *chat = jabber_chat_find_by_conv(conv); | 1800 JabberChat *chat = jabber_chat_find_by_conv(conv); |
1785 char *who; | 1801 char *who; |
1802 | |
1803 if (!chat) | |
1804 return PURPLE_CMD_RET_FAILED; | |
1786 | 1805 |
1787 who = g_strdup_printf("%s@%s/%s", chat->room, chat->server, args[0]); | 1806 who = g_strdup_printf("%s@%s/%s", chat->room, chat->server, args[0]); |
1788 | 1807 |
1789 jabber_message_send_im(purple_conversation_get_gc(conv), who, args[1], 0); | 1808 jabber_message_send_im(purple_conversation_get_gc(conv), who, args[1], 0); |
1790 | 1809 |