fix get() for embedded zeroes in key
This method had been overlooked.
diff --git a/include/json/value.h b/include/json/value.h
index 443f446..cf9703b 100644
--- a/include/json/value.h
+++ b/include/json/value.h
@@ -404,15 +404,19 @@
const Value& operator[](const CppTL::ConstString& key) const;
#endif
/// Return the member named key if it exist, defaultValue otherwise.
+ /// \note deep copy
Value get(const char* key, const Value& defaultValue) const;
/// Return the member named key if it exist, defaultValue otherwise.
+ /// \note deep copy
/// \param key may contain embedded nulls.
Value get(const char* key, const char* end, const Value& defaultValue) const;
/// Return the member named key if it exist, defaultValue otherwise.
+ /// \note deep copy
/// \param key may contain embedded nulls.
Value get(const std::string& key, const Value& defaultValue) const;
#ifdef JSON_USE_CPPTL
/// Return the member named key if it exist, defaultValue otherwise.
+ /// \note deep copy
Value get(const CppTL::ConstString& key, const Value& defaultValue) const;
#endif
/// Most general and efficient version of isMember()const, get()const,
diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp
index cefd05e..6d68002 100644
--- a/src/lib_json/json_value.cpp
+++ b/src/lib_json/json_value.cpp
@@ -1028,8 +1028,8 @@
Value Value::get(char const* key, char const* end, Value const& defaultValue) const
{
- const Value* value = &((*this)[key]);
- return value == &nullRef ? defaultValue : *value;
+ Value const* found = find(key, end);
+ return !found ? defaultValue : *found;
}
Value Value::get(char const* key, Value const& defaultValue) const
{
@@ -1104,7 +1104,7 @@
#ifdef JSON_USE_CPPTL
Value Value::get(const CppTL::ConstString& key,
const Value& defaultValue) const {
- return get(key.c_str(), defaultValue);
+ return get(key.c_str(), key.end_c_str(), defaultValue);
}
#endif