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);
|
||||
|
||||
if (jidp == NULL) {
|
||||
cons_show("Malformed JID: %s", jid);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (strcmp(subcmd, "allow") == 0) {
|
||||
presence_subscription(jidp->barejid, PRESENCE_SUBSCRIBED);
|
||||
cons_show("Accepted subscription for %s", jidp->barejid);
|
||||
|
||||
@@ -40,3 +40,17 @@ cmd_sub_shows_usage_when_no_arg(void** state)
|
||||
gboolean result = cmd_sub(NULL, CMD_SUB, args);
|
||||
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_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_usage_when_no_arg),
|
||||
cmocka_unit_test(test_cmd_sub_malformed_jid),
|
||||
|
||||
cmocka_unit_test(contact_in_group),
|
||||
cmocka_unit_test(contact_not_in_group),
|
||||
|
||||
Reference in New Issue
Block a user