Add unit test for leaking memory when throwing inside of an adl serializer
(problem described in issue #3881)
This commit is contained in:
parent
8fa0d7bb7e
commit
aadeb726c7
82
tests/src/unit-no-mem-leak-on-adl-serialize.cpp
Normal file
82
tests/src/unit-no-mem-leak-on-adl-serialize.cpp
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
// __ _____ _____ _____
|
||||||
|
// __| | __| | | | JSON for Modern C++ (supporting code)
|
||||||
|
// | | |__ | | | | | | version 3.11.2
|
||||||
|
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
|
||||||
|
//
|
||||||
|
// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
|
#include <nlohmann/json.hpp>
|
||||||
|
#include <exception>
|
||||||
|
|
||||||
|
struct Foo
|
||||||
|
{
|
||||||
|
int a;
|
||||||
|
int b;
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace nlohmann
|
||||||
|
{
|
||||||
|
template <>
|
||||||
|
struct adl_serializer<Foo>
|
||||||
|
{
|
||||||
|
static void to_json(json& j, Foo const& f)
|
||||||
|
{
|
||||||
|
switch (f.b)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
j["a"] = f.a;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
j[0] = f.a;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
j = "test";
|
||||||
|
}
|
||||||
|
if (f.a == 1)
|
||||||
|
{
|
||||||
|
throw std::runtime_error("b is invalid");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("check_for_mem_leak_on_adl_to_json-1")
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
nlohmann::json j = Foo {1, 0};
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
// just ignore the exception in this POC
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("check_for_mem_leak_on_adl_to_json-2")
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
nlohmann::json j = Foo {1, 1};
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
// just ignore the exception in this POC
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("check_for_mem_leak_on_adl_to_json-2")
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
nlohmann::json j = Foo {1, 2};
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
// just ignore the exception in this POC
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user