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