| Index: base/string_number_conversions.cc
|
| diff --git a/base/string_number_conversions.cc b/base/string_number_conversions.cc
|
| index e80b6499f2e04c0787a48d08f87b306e9fc3e468..ca1574f1686c31e559b7a6ead01d13581dc297e6 100644
|
| --- a/base/string_number_conversions.cc
|
| +++ b/base/string_number_conversions.cc
|
| @@ -295,16 +295,19 @@ class BaseIteratorRangeToNumberTraits {
|
| template<typename ITERATOR>
|
| class BaseHexIteratorRangeToIntTraits
|
| : public BaseIteratorRangeToNumberTraits<ITERATOR, int, 16> {
|
| - public:
|
| - // Allow parsing of 0xFFFFFFFF, which is technically an overflow
|
| - static unsigned int max() {
|
| - return std::numeric_limits<unsigned int>::max();
|
| - }
|
| +};
|
| +
|
| +template<typename ITERATOR>
|
| +class BaseHexIteratorRangeToInt64Traits
|
| + : public BaseIteratorRangeToNumberTraits<ITERATOR, int64, 16> {
|
| };
|
|
|
| typedef BaseHexIteratorRangeToIntTraits<StringPiece::const_iterator>
|
| HexIteratorRangeToIntTraits;
|
|
|
| +typedef BaseHexIteratorRangeToInt64Traits<StringPiece::const_iterator>
|
| + HexIteratorRangeToInt64Traits;
|
| +
|
| template<typename STR>
|
| bool HexStringToBytesT(const STR& input, std::vector<uint8>* output) {
|
| DCHECK_EQ(output->size(), 0u);
|
| @@ -326,7 +329,8 @@ template <typename VALUE, int BASE>
|
| class StringPieceToNumberTraits
|
| : public BaseIteratorRangeToNumberTraits<StringPiece::const_iterator,
|
| VALUE,
|
| - BASE> {};
|
| + BASE> {
|
| +};
|
|
|
| template <typename VALUE>
|
| bool StringToIntImpl(const StringPiece& input, VALUE* output) {
|
| @@ -338,7 +342,8 @@ template <typename VALUE, int BASE>
|
| class StringPiece16ToNumberTraits
|
| : public BaseIteratorRangeToNumberTraits<StringPiece16::const_iterator,
|
| VALUE,
|
| - BASE> {};
|
| + BASE> {
|
| +};
|
|
|
| template <typename VALUE>
|
| bool String16ToIntImpl(const StringPiece16& input, VALUE* output) {
|
| @@ -481,6 +486,11 @@ bool HexStringToInt(const StringPiece& input, int* output) {
|
| input.begin(), input.end(), output);
|
| }
|
|
|
| +bool HexStringToInt64(const StringPiece& input, int64* output) {
|
| + return IteratorRangeToNumber<HexIteratorRangeToInt64Traits>::Invoke(
|
| + input.begin(), input.end(), output);
|
| +}
|
| +
|
| bool HexStringToBytes(const std::string& input, std::vector<uint8>* output) {
|
| return HexStringToBytesT(input, output);
|
| }
|
|
|