Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1b8981e9 authored by Steven Moreland's avatar Steven Moreland
Browse files

ParseDouble: allow validation only.

This change also updates documentation for Parse(Ui|I)nt functions
which recently had a corresponding change applied.

Bug: 110758329
Test: libbase_test
Change-Id: I4842c0500a6e49498eeb8a63d1117c06727fffdf
parent f41897a6
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -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;
  }
  if (out != nullptr) {
    *out = result;
  }
  return true;
}

+6 −6
Original line number Diff line number Diff line
@@ -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(),
+5 −0
Original line number Diff line number Diff line
@@ -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));
}