Skip to content

Commit c98f988

Browse files
committed
🐛 fix return value of get_ptr for unsigned integers
1 parent 1b9a9d1 commit c98f988

File tree

6 files changed

+10
-10
lines changed

6 files changed

+10
-10
lines changed

docs/mkdocs/docs/api/basic_json/get_ptr.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ Constant.
3535

3636
!!! danger "Undefined behavior"
3737

38-
Writing data to the pointee of the result yields an undefined state.
38+
The pointer becomes invalid if the underlying JSON object changes.
3939

4040
## Examples
4141

docs/mkdocs/docs/api/basic_json/get_ref.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ Constant.
4040

4141
!!! danger "Undefined behavior"
4242

43-
Writing data to the referee of the result yields an undefined state.
43+
The reference becomes invalid if the underlying JSON object changes.
4444

4545
## Examples
4646

include/nlohmann/json.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1463,13 +1463,13 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
14631463
/// get a pointer to the value (integer number)
14641464
number_integer_t* get_impl_ptr(number_integer_t* /*unused*/) noexcept
14651465
{
1466-
return is_number_integer() ? &m_data.m_value.number_integer : nullptr;
1466+
return m_data.m_type == value_t::number_integer ? &m_data.m_value.number_integer : nullptr;
14671467
}
14681468

14691469
/// get a pointer to the value (integer number)
14701470
constexpr const number_integer_t* get_impl_ptr(const number_integer_t* /*unused*/) const noexcept
14711471
{
1472-
return is_number_integer() ? &m_data.m_value.number_integer : nullptr;
1472+
return m_data.m_type == value_t::number_integer ? &m_data.m_value.number_integer : nullptr;
14731473
}
14741474

14751475
/// get a pointer to the value (unsigned number)

single_include/nlohmann/json.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20962,13 +20962,13 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
2096220962
/// get a pointer to the value (integer number)
2096320963
number_integer_t* get_impl_ptr(number_integer_t* /*unused*/) noexcept
2096420964
{
20965-
return is_number_integer() ? &m_data.m_value.number_integer : nullptr;
20965+
return m_data.m_type == value_t::number_integer ? &m_data.m_value.number_integer : nullptr;
2096620966
}
2096720967

2096820968
/// get a pointer to the value (integer number)
2096920969
constexpr const number_integer_t* get_impl_ptr(const number_integer_t* /*unused*/) const noexcept
2097020970
{
20971-
return is_number_integer() ? &m_data.m_value.number_integer : nullptr;
20971+
return m_data.m_type == value_t::number_integer ? &m_data.m_value.number_integer : nullptr;
2097220972
}
2097320973

2097420974
/// get a pointer to the value (unsigned number)

tests/src/unit-pointer_access.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ TEST_CASE("pointer access")
326326
CHECK(value.get_ptr<json::array_t*>() == nullptr);
327327
CHECK(value.get_ptr<json::string_t*>() == nullptr);
328328
CHECK(value.get_ptr<json::boolean_t*>() == nullptr);
329-
CHECK(value.get_ptr<json::number_integer_t*>() != nullptr);
329+
CHECK(value.get_ptr<json::number_integer_t*>() == nullptr);
330330
CHECK(value.get_ptr<json::number_unsigned_t*>() != nullptr);
331331
CHECK(value.get_ptr<json::number_float_t*>() == nullptr);
332332
CHECK(value.get_ptr<json::binary_t*>() == nullptr);
@@ -355,7 +355,7 @@ TEST_CASE("pointer access")
355355
CHECK(value.get_ptr<const json::array_t*>() == nullptr);
356356
CHECK(value.get_ptr<const json::string_t*>() == nullptr);
357357
CHECK(value.get_ptr<const json::boolean_t*>() == nullptr);
358-
CHECK(value.get_ptr<const json::number_integer_t*>() != nullptr);
358+
CHECK(value.get_ptr<const json::number_integer_t*>() == nullptr);
359359
CHECK(value.get_ptr<const json::number_unsigned_t*>() != nullptr);
360360
CHECK(value.get_ptr<const json::number_float_t*>() == nullptr);
361361
CHECK(value.get_ptr<const json::binary_t*>() == nullptr);

tests/src/unit-reference_access.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,8 @@ TEST_CASE("reference access")
215215
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number", json::type_error&);
216216
CHECK_THROWS_WITH_AS(value.get_ref<json::boolean_t&>(),
217217
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number", json::type_error&);
218-
//CHECK_THROWS_WITH_AS(value.get_ref<json::number_integer_t&>(),
219-
// "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number", json::type_error&);
218+
CHECK_THROWS_WITH_AS(value.get_ref<json::number_integer_t&>(),
219+
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number", json::type_error&);
220220
CHECK_NOTHROW(value.get_ref<json::number_unsigned_t&>());
221221
CHECK_THROWS_WITH_AS(value.get_ref<json::number_float_t&>(), "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number", json::type_error&);
222222
}

0 commit comments

Comments
 (0)