Merge "ParseDouble: allow validation only."

This commit is contained in:
Treehugger Robot 2018-08-09 02:38:27 +00:00 committed by Gerrit Code Review
commit 4842b1b53e
3 changed files with 15 additions and 8 deletions

View File

@ -24,7 +24,7 @@
namespace android {
namespace base {
// Parse double value in the string 's' and sets 'out' to that value.
// Parse double value in the string 's' and sets 'out' to that value if it exists.
// Optionally allows the caller to define a 'min' and 'max' beyond which
// otherwise valid values will be rejected. Returns boolean success.
static inline bool ParseDouble(const char* s, double* out,
@ -39,7 +39,9 @@ static inline bool ParseDouble(const char* s, double* out,
if (result < min || max < result) {
return false;
}
*out = result;
if (out != nullptr) {
*out = result;
}
return true;
}

View File

@ -27,9 +27,9 @@ namespace android {
namespace base {
// Parses the unsigned decimal or hexadecimal integer in the string 's' and sets
// 'out' to that value. Optionally allows the caller to define a 'max' beyond
// which otherwise valid values will be rejected. Returns boolean success; 'out'
// is untouched if parsing fails.
// 'out' to that value if it is specified. Optionally allows the caller to define
// a 'max' beyond which otherwise valid values will be rejected. Returns boolean
// success; 'out' is untouched if parsing fails.
template <typename T>
bool ParseUint(const char* s, T* out, T max = std::numeric_limits<T>::max(),
bool allow_suffixes = false) {
@ -72,9 +72,9 @@ bool ParseByteCount(const std::string& s, T* out, T max = std::numeric_limits<T>
}
// Parses the signed decimal or hexadecimal integer in the string 's' and sets
// 'out' to that value. Optionally allows the caller to define a 'min' and 'max'
// beyond which otherwise valid values will be rejected. Returns boolean
// success; 'out' is untouched if parsing fails.
// 'out' to that value if it is specified. Optionally allows the caller to define
// a 'min' and 'max' beyond which otherwise valid values will be rejected. Returns
// boolean success; 'out' is untouched if parsing fails.
template <typename T>
bool ParseInt(const char* s, T* out,
T min = std::numeric_limits<T>::min(),

View File

@ -35,4 +35,9 @@ TEST(parsedouble, smoke) {
ASSERT_FALSE(android::base::ParseDouble("3.0", &d, -1.0, 2.0));
ASSERT_TRUE(android::base::ParseDouble("1.0", &d, 0.0, 2.0));
ASSERT_DOUBLE_EQ(1.0, d);
ASSERT_FALSE(android::base::ParseDouble("123.4x", nullptr));
ASSERT_TRUE(android::base::ParseDouble("-123.4", nullptr));
ASSERT_FALSE(android::base::ParseDouble("3.0", nullptr, -1.0, 2.0));
ASSERT_TRUE(android::base::ParseDouble("1.0", nullptr, 0.0, 2.0));
}