summaryrefslogtreecommitdiff
path: root/json4cpp/tests/src/unit-no-mem-leak-on-adl-serialize.cpp
diff options
context:
space:
mode:
authorMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 18:42:50 +0300
committerMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 18:42:50 +0300
commit5fad10f89c485cfdc7b99011f07609f8871160d4 (patch)
tree1860b39753b652dfe54d3cbbc80c875f40198d1f /json4cpp/tests/src/unit-no-mem-leak-on-adl-serialize.cpp
parent292baed7ac0cf84263263966ed32ed113cae857f (diff)
parent9a737481aed085fd289f82dff1fa8c3c66627a7e (diff)
downloadProject-Tick-5fad10f89c485cfdc7b99011f07609f8871160d4.tar.gz
Project-Tick-5fad10f89c485cfdc7b99011f07609f8871160d4.zip
Add 'json4cpp/' from commit '9a737481aed085fd289f82dff1fa8c3c66627a7e'
git-subtree-dir: json4cpp git-subtree-mainline: 292baed7ac0cf84263263966ed32ed113cae857f git-subtree-split: 9a737481aed085fd289f82dff1fa8c3c66627a7e
Diffstat (limited to 'json4cpp/tests/src/unit-no-mem-leak-on-adl-serialize.cpp')
-rw-r--r--json4cpp/tests/src/unit-no-mem-leak-on-adl-serialize.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/json4cpp/tests/src/unit-no-mem-leak-on-adl-serialize.cpp b/json4cpp/tests/src/unit-no-mem-leak-on-adl-serialize.cpp
new file mode 100644
index 0000000000..469fc2c75f
--- /dev/null
+++ b/json4cpp/tests/src/unit-no-mem-leak-on-adl-serialize.cpp
@@ -0,0 +1,86 @@
+// __ _____ _____ _____
+// __| | __| | | | JSON for Modern C++ (supporting code)
+// | | |__ | | | | | | version 3.12.0
+// |_____|_____|_____|_|___| https://github.com/nlohmann/json
+//
+// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann <https://nlohmann.me>
+// SPDX-License-Identifier: MIT
+
+#include "doctest_compatibility.h"
+
+#include <nlohmann/json.hpp>
+#include <exception>
+#include <iostream>
+
+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");
+ }
+ }
+};
+} // namespace nlohmann
+
+TEST_CASE("check_for_mem_leak_on_adl_to_json-1")
+{
+ try
+ {
+ const nlohmann::json j = Foo {1, 0};
+ std::cout << j.dump() << "\n";
+ }
+ catch (...) // NOLINT(bugprone-empty-catch)
+ {
+ // just ignore the exception in this POC
+ }
+}
+
+TEST_CASE("check_for_mem_leak_on_adl_to_json-2")
+{
+ try
+ {
+ const nlohmann::json j = Foo {1, 1};
+ std::cout << j.dump() << "\n";
+ }
+ catch (...) // NOLINT(bugprone-empty-catch)
+ {
+ // just ignore the exception in this POC
+ }
+}
+
+TEST_CASE("check_for_mem_leak_on_adl_to_json-2")
+{
+ try
+ {
+ const nlohmann::json j = Foo {1, 2};
+ std::cout << j.dump() << "\n";
+ }
+ catch (...) // NOLINT(bugprone-empty-catch)
+ {
+ // just ignore the exception in this POC
+ }
+}
+
+