diff --git a/src/kernel/alliance.test.c b/src/kernel/alliance.test.c index ad936fac9..98e60e943 100644 --- a/src/kernel/alliance.test.c +++ b/src/kernel/alliance.test.c @@ -55,6 +55,9 @@ static void test_alliance_join(CuTest *tc) { setalliance(fix.f2, al); CuAssertPtrEquals(tc, fix.f1, alliance_get_leader(al)); CuAssertTrue(tc, is_allied(fix.f1, fix.f2)); + setalliance(fix.f1, 0); + CuAssertPtrEquals(tc, fix.f2, alliance_get_leader(al)); + CuAssertTrue(tc, !is_allied(fix.f1, fix.f2)); test_cleanup(); } diff --git a/src/kernel/faction.c b/src/kernel/faction.c index 72643c3cb..95d3b7392 100755 --- a/src/kernel/faction.c +++ b/src/kernel/faction.c @@ -651,6 +651,9 @@ void remove_empty_factions(void) *fp = f->next; funhash(f); free_faction(f); + if (f->alliance && f->alliance->_leader == f) { + setalliance(f, 0); + } free(f); } else diff --git a/src/kernel/faction.test.c b/src/kernel/faction.test.c index 4852b08dc..ef22b40cd 100644 --- a/src/kernel/faction.test.c +++ b/src/kernel/faction.test.c @@ -1,6 +1,7 @@ #include #include +#include #include #include #include @@ -30,6 +31,22 @@ static void test_remove_empty_factions_allies(CuTest *tc) { test_cleanup(); } +static void test_remove_empty_factions_alliance(CuTest *tc) { + faction *f; + struct alliance *al; + region *r; + + test_cleanup(); + r = test_create_region(0, 0, 0); + f = test_create_faction(0); + al = makealliance(0, "Hodor"); + setalliance(f, al); + CuAssertPtrEquals(tc, f, alliance_get_leader(al)); + remove_empty_factions(); + CuAssertPtrEquals(tc, 0, al->_leader); + test_cleanup(); +} + static void test_remove_empty_factions(CuTest *tc) { faction *f, *fm; int fno; @@ -130,6 +147,7 @@ CuSuite *get_faction_suite(void) SUITE_ADD_TEST(suite, test_addfaction); SUITE_ADD_TEST(suite, test_remove_empty_factions); SUITE_ADD_TEST(suite, test_remove_empty_factions_allies); + SUITE_ADD_TEST(suite, test_remove_empty_factions_alliance); SUITE_ADD_TEST(suite, test_remove_dead_factions); SUITE_ADD_TEST(suite, test_get_monsters); SUITE_ADD_TEST(suite, test_set_origin);