mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
Implement missing string conversions for JSON
`Json::Value::isConvertibleTo` indicates that unsigned integers and reals are convertible to string, but trying to do so (with `Json::Value::asString`) throws an exception because its internal switch is missing these cases. This change fills them in (and adds tests). Acknowledgements: Ripple thanks Guido Vranken for responsibly disclosing this issue. Closes #2778
This commit is contained in:
committed by
Nik Bougalis
parent
dc4d76f626
commit
c354809e1c
@@ -24,6 +24,7 @@
|
||||
#include <ripple/beast/type_name.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <regex>
|
||||
|
||||
namespace ripple {
|
||||
|
||||
@@ -250,6 +251,41 @@ struct json_value_test : beast::unit_test::suite
|
||||
}
|
||||
}
|
||||
|
||||
void test_conversions ()
|
||||
{
|
||||
// We have Json::Int, but not Json::Double or Json::Real.
|
||||
// We have Json::Int, Json::Value::Int, and Json::ValueType::intValue.
|
||||
// We have Json::ValueType::realValue but Json::Value::asDouble.
|
||||
// TODO: What's the thinking here?
|
||||
{
|
||||
// null
|
||||
Json::Value val;
|
||||
BEAST_EXPECT(val.isNull());
|
||||
BEAST_EXPECT(val.asString() == "");
|
||||
}
|
||||
{
|
||||
// bool
|
||||
Json::Value val = true;
|
||||
BEAST_EXPECT(val.asString() == "true");
|
||||
}
|
||||
{
|
||||
// int
|
||||
Json::Value val = -1234;
|
||||
BEAST_EXPECT(val.asString() == "-1234");
|
||||
}
|
||||
{
|
||||
// uint
|
||||
Json::Value val = 1234U;
|
||||
BEAST_EXPECT(val.asString() == "1234");
|
||||
}
|
||||
{
|
||||
// real
|
||||
Json::Value val = 2.0;
|
||||
BEAST_EXPECT(std::regex_match(
|
||||
val.asString(), std::regex("^2\\.0*$")));
|
||||
}
|
||||
}
|
||||
|
||||
void test_nest_limits ()
|
||||
{
|
||||
Json::Reader r;
|
||||
@@ -316,6 +352,7 @@ struct json_value_test : beast::unit_test::suite
|
||||
test_move ();
|
||||
test_comparisons ();
|
||||
test_compact ();
|
||||
test_conversions();
|
||||
test_nest_limits ();
|
||||
test_leak();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user