From d677df3c4b6f7a6856d8de4dad315744d7016752 Mon Sep 17 00:00:00 2001 From: Derek Bailey Date: Mon, 12 Sep 2022 23:30:44 -0700 Subject: [PATCH] avoid double free in test --- tests/monster_test.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/tests/monster_test.cpp b/tests/monster_test.cpp index c8a71de90ed..122d7508bf2 100644 --- a/tests/monster_test.cpp +++ b/tests/monster_test.cpp @@ -819,18 +819,18 @@ void UnPackTo(const uint8_t *flatbuf) { // Test UnPackTo without merging state { // Create an enemy - MonsterT enemy; - enemy.name = "Enemy"; + MonsterT* enemy = new MonsterT(); + enemy->name = "Enemy"; // And create another monster owning the enemy, MonsterT mon; mon.name = "I'm monster 1"; - mon.enemy.reset(&enemy); + mon.enemy.reset(enemy); TEST_ASSERT(mon.enemy != nullptr); // Assert that all the Monster objects are correct. TEST_EQ_STR(mon.name.c_str(), "I'm monster 1"); - TEST_EQ_STR(enemy.name.c_str(), "Enemy"); + TEST_EQ_STR(enemy->name.c_str(), "Enemy"); TEST_EQ_STR(mon.enemy->name.c_str(), "Enemy"); // Now unpack monster ("MyMonster") into monster @@ -839,6 +839,9 @@ void UnPackTo(const uint8_t *flatbuf) { // Monster name should be from monster TEST_EQ_STR(mon.name.c_str(), "MyMonster"); + // Enemy should still have its own name. + TEST_EQ_STR(enemy->name.c_str(), "Enemy"); + // The monster shouldn't have any enemies, because monster didn't. TEST_ASSERT(mon.enemy == nullptr); } @@ -846,18 +849,18 @@ void UnPackTo(const uint8_t *flatbuf) { //Test UnPackTo with merging state { // Create an enemy - MonsterT enemy; - enemy.name = "Enemy"; + MonsterT* enemy = new MonsterT(); + enemy->name = "Enemy"; // And create another monster owning the enemy, MonsterT mon; mon.name = "I'm monster 1"; - mon.enemy.reset(&enemy); + mon.enemy.reset(enemy); TEST_ASSERT(mon.enemy != nullptr); // Assert that all the Monster objects are correct. TEST_EQ_STR(mon.name.c_str(), "I'm monster 1"); - TEST_EQ_STR(enemy.name.c_str(), "Enemy"); + TEST_EQ_STR(enemy->name.c_str(), "Enemy"); TEST_EQ_STR(mon.enemy->name.c_str(), "Enemy"); // Now unpack monster ("MyMonster") into monster, indicating to merge state. @@ -867,7 +870,7 @@ void UnPackTo(const uint8_t *flatbuf) { TEST_EQ_STR(mon.name.c_str(), "MyMonster"); // Enemy should still have its own name. - TEST_EQ_STR(enemy.name.c_str(), "Enemy"); + TEST_EQ_STR(enemy->name.c_str(), "Enemy"); // The monster should continue to have its original enemy monster, because // the states were merged.