From d47bee5572f5ba909bd57c019f2414f20713c3fc Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 29 Dec 2017 21:01:50 +0100 Subject: [PATCH 1/2] christmas 2017 --- scripts/eressea/xmas.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/eressea/xmas.lua b/scripts/eressea/xmas.lua index b728c9976..6f319a316 100644 --- a/scripts/eressea/xmas.lua +++ b/scripts/eressea/xmas.lua @@ -2,6 +2,7 @@ if not config.xmas or config.xmas==0 then return nil end local gifts = { e2 = { + { year = 2017, turn = 1057, item = 'snowglobe', msg='santa_f' }, { year = 2015, turn = 959, item = 'snowglobe', msg='santa_f' }, { year = 2009, turn = 624, item = 'xmastree' }, { year = 2006, turn = 468, key = 'xm06', item = 'snowman' }, From d78b21c1c36987f1b9aac5192483884116a22bd2 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 21 Jan 2018 10:32:39 +0100 Subject: [PATCH 2/2] BUG 2413: renumber parsing caused f->no == 0 --- src/kernel/save.c | 3 ++- src/renumber.c | 12 ++++++++---- src/renumber.test.c | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/kernel/save.c b/src/kernel/save.c index 926de1bb1..227304339 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -1149,7 +1149,8 @@ void write_faction(gamedata *data, const faction * f) ursprung *ur; assert(f->_alive); - write_faction_reference(f, data->store); + assert(f->no > 0 && f->no <= MAX_UNIT_NR); + WRITE_INT(data->store, f->no); WRITE_INT(data->store, f->subscription); #if RELEASE_VERSION >= SPELL_LEVEL_VERSION WRITE_INT(data->store, f->max_spelllevel); diff --git a/src/renumber.c b/src/renumber.c index 30769403f..5f1fc3537 100644 --- a/src/renumber.c +++ b/src/renumber.c @@ -88,11 +88,15 @@ int renumber_cmd(unit * u, order * ord) s = gettoken(token, sizeof(token)); if (s && *s) { int id = atoi36((const char *)s); - attrib *a = a_find(f->attribs, &at_number); - if (!a) - a = a_add(&f->attribs, a_new(&at_number)); - a->data.i = id; + if (id > 0 && id <= MAX_UNIT_NR) { + attrib *a = a_find(f->attribs, &at_number); + if (!a) + a = a_add(&f->attribs, a_new(&at_number)); + a->data.i = id; + break; + } } + cmistake(u, ord, 114, MSG_EVENT); break; case P_UNIT: diff --git a/src/renumber.test.c b/src/renumber.test.c index 8f6f91a59..c512367b8 100644 --- a/src/renumber.test.c +++ b/src/renumber.test.c @@ -49,6 +49,37 @@ static void test_renumber_faction_duplicate(CuTest *tc) { test_cleanup(); } +static void test_renumber_faction_invalid(CuTest *tc) { + unit *u; + faction *f; + int no; + const struct locale *lang; + + test_setup_ex(tc); + u = test_create_unit(f = test_create_faction(0), test_create_region(0, 0, 0)); + no = f->no; + lang = f->locale; + u->thisorder = create_order(K_NUMBER, lang, "%s [halima]", LOC(lang, parameters[P_FACTION])); + renumber_cmd(u, u->thisorder); + CuAssertPtrNotNull(tc, test_find_messagetype(f->msgs, "error114")); + renumber_factions(); + CuAssertIntEquals(tc, no, f->no); + + test_clear_messages(f); + free_order(u->thisorder); + u->thisorder = create_order(K_NUMBER, lang, "%s 10000", LOC(lang, parameters[P_FACTION])); + renumber_cmd(u, u->thisorder); + CuAssertPtrNotNull(tc, test_find_messagetype(f->msgs, "error114")); + + test_clear_messages(f); + free_order(u->thisorder); + u->thisorder = create_order(K_NUMBER, lang, "%s 0", LOC(lang, parameters[P_FACTION])); + renumber_cmd(u, u->thisorder); + CuAssertPtrNotNull(tc, test_find_messagetype(f->msgs, "error114")); + + test_cleanup(); +} + static void test_renumber_building(CuTest *tc) { unit *u; int uno, no; @@ -230,5 +261,6 @@ CuSuite *get_renumber_suite(void) SUITE_ADD_TEST(suite, test_renumber_ship_duplicate); SUITE_ADD_TEST(suite, test_renumber_faction); SUITE_ADD_TEST(suite, test_renumber_faction_duplicate); + SUITE_ADD_TEST(suite, test_renumber_faction_invalid); return suite; }