mirror of
https://github.com/nlohmann/json
synced 2024-11-09 14:10:07 +00:00
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