From e9990e1656df7fd4863fab819a6d67b3cf07964d Mon Sep 17 00:00:00 2001 From: TimTIM Date: Thu, 28 Nov 2024 03:21:10 +0800 Subject: [PATCH] Serialize non-finite numbers as their corresponding JSON string representations. --- msgpackpp/include/msgpackpp/msgpackpp.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/msgpackpp/include/msgpackpp/msgpackpp.h b/msgpackpp/include/msgpackpp/msgpackpp.h index 8200750..d5f5035 100644 --- a/msgpackpp/include/msgpackpp/msgpackpp.h +++ b/msgpackpp/include/msgpackpp/msgpackpp.h @@ -1186,7 +1186,19 @@ class parser { os << "false"; } } else if (is_number()) { - os << get_number(); + const auto d = get_number(); + if (std::isfinite(d)) { + os << d; + } else { + // see https://learn.microsoft.com/dotnet/api/system.text.json.serialization.jsonnumberhandling + if (std::isnan(d)) { + os << "\"NaN\""; + } else if (d == std::numeric_limits::infinity()) { + os << "\"Infinity\""; + } else if (d == -std::numeric_limits::infinity()) { + os << "\"-Infinity\""; + } + } } else if (is_string()) { os << '"' << get_string() << '"'; } else if (is_binary()) {