Prevent crash with malformed JID in /sub command #23
@@ -1263,6 +1263,11 @@ cmd_sub(ProfWin* window, const char* const command, gchar** args)
|
|||||||
|
|
||||||
auto_jid Jid* jidp = jid_create(jid);
|
auto_jid Jid* jidp = jid_create(jid);
|
||||||
|
|
||||||
|
if (jidp == NULL) {
|
||||||
|
cons_show("Malformed JID: %s", jid);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
if (strcmp(subcmd, "allow") == 0) {
|
if (strcmp(subcmd, "allow") == 0) {
|
||||||
presence_subscription(jidp->barejid, PRESENCE_SUBSCRIBED);
|
presence_subscription(jidp->barejid, PRESENCE_SUBSCRIBED);
|
||||||
cons_show("Accepted subscription for %s", jidp->barejid);
|
cons_show("Accepted subscription for %s", jidp->barejid);
|
||||||
|
|||||||
@@ -289,7 +289,7 @@ void cons_show_disco_info(const char* from, GSList* identities, GSList* features
|
|||||||
|
|
||||||
void cons_show_disco_contact_information(GHashTable* addresses);
|
void cons_show_disco_contact_information(GHashTable* addresses);
|
||||||
|
|
||||||
void cons_show_qrcode();
|
void cons_show_qrcode(const char* const text);
|
||||||
|
|
||||||
void cons_show_room_invite(const char* const invitor, const char* const room, const char* const reason);
|
void cons_show_room_invite(const char* const invitor, const char* const room, const char* const reason);
|
||||||
void cons_check_version(gboolean not_available_msg);
|
void cons_check_version(gboolean not_available_msg);
|
||||||
|
|||||||
@@ -40,3 +40,17 @@ cmd_sub_shows_usage_when_no_arg(void** state)
|
|||||||
gboolean result = cmd_sub(NULL, CMD_SUB, args);
|
gboolean result = cmd_sub(NULL, CMD_SUB, args);
|
||||||
assert_true(result);
|
assert_true(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_cmd_sub_malformed_jid(void** state)
|
||||||
|
{
|
||||||
|
ProfWin win;
|
||||||
|
win.type = WIN_CONSOLE;
|
||||||
|
gchar* args[] = { "request", "@example.com" };
|
||||||
|
|
||||||
|
will_return(connection_get_status, JABBER_CONNECTED);
|
||||||
|
|
||||||
|
expect_cons_show("Malformed JID: @example.com");
|
||||||
|
gboolean result = cmd_sub((ProfWin*)&win, CMD_SUB, args);
|
||||||
|
assert_true(result);
|
||||||
|
}
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
void cmd_sub_shows_message_when_not_connected(void** state);
|
void cmd_sub_shows_message_when_not_connected(void** state);
|
||||||
void cmd_sub_shows_usage_when_no_arg(void** state);
|
void cmd_sub_shows_usage_when_no_arg(void** state);
|
||||||
|
void test_cmd_sub_malformed_jid(void** state);
|
||||||
@@ -386,6 +386,7 @@ main(int argc, char* argv[])
|
|||||||
|
|
||||||
cmocka_unit_test(cmd_sub_shows_message_when_not_connected),
|
cmocka_unit_test(cmd_sub_shows_message_when_not_connected),
|
||||||
cmocka_unit_test(cmd_sub_shows_usage_when_no_arg),
|
cmocka_unit_test(cmd_sub_shows_usage_when_no_arg),
|
||||||
|
cmocka_unit_test(test_cmd_sub_malformed_jid),
|
||||||
|
|
||||||
cmocka_unit_test(contact_in_group),
|
cmocka_unit_test(contact_in_group),
|
||||||
cmocka_unit_test(contact_not_in_group),
|
cmocka_unit_test(contact_not_in_group),
|
||||||
|
|||||||
Reference in New Issue
Block a user