fix(cmd_sub): Prevent crash with malformed JID in /sub command
Added null check for jidp in cmd_sub to handle jid_create returning NULL. Crash occurred when processing malformed JID inputs like @example.com. Ensures robust handling of invalid JIDs. Fixes #22
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -40,3 +40,16 @@ 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;
|
||||||
|
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