Unverified Commit 9ec0e4c2 authored by Niels Lohmann's avatar Niels Lohmann Committed by GitHub

Merge pull request #2140 from nlohmann/issue1715

Respect allow_exceptions=false for binary formats
parents a01759af 225fa58f
...@@ -331,13 +331,14 @@ inline input_stream_adapter input_adapter(std::istream&& stream) ...@@ -331,13 +331,14 @@ inline input_stream_adapter input_adapter(std::istream&& stream)
return input_stream_adapter(stream); return input_stream_adapter(stream);
} }
template<typename CharT, template<typename CharT, typename SizeT,
typename std::enable_if< typename std::enable_if<
std::is_pointer<CharT>::value and std::is_pointer<CharT>::value and
std::is_integral<typename std::remove_pointer<CharT>::type>::value and std::is_integral<typename std::remove_pointer<CharT>::type>::value and
not std::is_same<SizeT, bool>::value and
sizeof(typename std::remove_pointer<CharT>::type) == 1, sizeof(typename std::remove_pointer<CharT>::type) == 1,
int>::type = 0> int>::type = 0>
input_buffer_adapter input_adapter(CharT b, std::size_t l) input_buffer_adapter input_adapter(CharT b, SizeT l)
{ {
return input_buffer_adapter(reinterpret_cast<const char*>(b), l); return input_buffer_adapter(reinterpret_cast<const char*>(b), l);
} }
......
...@@ -4753,13 +4753,14 @@ inline input_stream_adapter input_adapter(std::istream&& stream) ...@@ -4753,13 +4753,14 @@ inline input_stream_adapter input_adapter(std::istream&& stream)
return input_stream_adapter(stream); return input_stream_adapter(stream);
} }
template<typename CharT, template<typename CharT, typename SizeT,
typename std::enable_if< typename std::enable_if<
std::is_pointer<CharT>::value and std::is_pointer<CharT>::value and
std::is_integral<typename std::remove_pointer<CharT>::type>::value and std::is_integral<typename std::remove_pointer<CharT>::type>::value and
not std::is_same<SizeT, bool>::value and
sizeof(typename std::remove_pointer<CharT>::type) == 1, sizeof(typename std::remove_pointer<CharT>::type) == 1,
int>::type = 0> int>::type = 0>
input_buffer_adapter input_adapter(CharT b, std::size_t l) input_buffer_adapter input_adapter(CharT b, SizeT l)
{ {
return input_buffer_adapter(reinterpret_cast<const char*>(b), l); return input_buffer_adapter(reinterpret_cast<const char*>(b), l);
} }
......
...@@ -1890,6 +1890,28 @@ TEST_CASE("regression tests") ...@@ -1890,6 +1890,28 @@ TEST_CASE("regression tests")
json j = val; json j = val;
} }
SECTION("issue #1715 - json::from_cbor does not respect allow_exceptions = false when input is string literal")
{
SECTION("string literal")
{
json cbor = json::from_cbor("B", true, false);
CHECK(cbor.is_discarded());
}
SECTION("string array")
{
const char input[] = { 'B', 0x00 };
json cbor = json::from_cbor(input, true, false);
CHECK(cbor.is_discarded());
}
SECTION("std::string")
{
json cbor = json::from_cbor(std::string("B"), true, false);
CHECK(cbor.is_discarded());
}
}
SECTION("issue #1805 - A pair<T1, T2> is json constructible only if T1 and T2 are json constructible") SECTION("issue #1805 - A pair<T1, T2> is json constructible only if T1 and T2 are json constructible")
{ {
static_assert(!std::is_constructible<json, std::pair<std::string, NotSerializableData>>::value, ""); static_assert(!std::is_constructible<json, std::pair<std::string, NotSerializableData>>::value, "");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment