| Index: third_party/WebKit/Source/core/html/parser/HTMLParserIdioms.cpp
 | 
| diff --git a/third_party/WebKit/Source/core/html/parser/HTMLParserIdioms.cpp b/third_party/WebKit/Source/core/html/parser/HTMLParserIdioms.cpp
 | 
| index 7b9109c7d6017bef8b7692bddb540e6561ed5a38..79583d0f0607ab309e475cc7eb355aa090bc12b2 100644
 | 
| --- a/third_party/WebKit/Source/core/html/parser/HTMLParserIdioms.cpp
 | 
| +++ b/third_party/WebKit/Source/core/html/parser/HTMLParserIdioms.cpp
 | 
| @@ -161,9 +161,7 @@ static bool parseHTMLIntegerInternal(const CharacterType* position,
 | 
|                                       const CharacterType* end,
 | 
|                                       int& value) {
 | 
|    // Step 3
 | 
| -  // We do not do this step and do not have a local sign
 | 
| -  // variable since due to a bug in charactersToIntStrict
 | 
| -  // we have to add the sign to the digits string.
 | 
| +  bool isNegative = false;
 | 
|  
 | 
|    // Step 4
 | 
|    while (position < end) {
 | 
| @@ -178,9 +176,8 @@ static bool parseHTMLIntegerInternal(const CharacterType* position,
 | 
|    ASSERT(position < end);
 | 
|  
 | 
|    // Step 6
 | 
| -  StringBuilder digits;
 | 
|    if (*position == '-') {
 | 
| -    digits.append('-');
 | 
| +    isNegative = true;
 | 
|      ++position;
 | 
|    } else if (*position == '+')
 | 
|      ++position;
 | 
| @@ -193,19 +190,22 @@ static bool parseHTMLIntegerInternal(const CharacterType* position,
 | 
|      return false;
 | 
|  
 | 
|    // Step 8
 | 
| -  while (position < end) {
 | 
| -    if (!isASCIIDigit(*position))
 | 
| -      break;
 | 
| -    digits.append(*position++);
 | 
| -  }
 | 
| -
 | 
| +  static const int intMax = std::numeric_limits<int>::max();
 | 
| +  const int base = 10;
 | 
| +  const int maxMultiplier = intMax / base;
 | 
| +
 | 
| +  unsigned temp = 0;
 | 
| +  do {
 | 
| +    int digitValue = *position - '0';
 | 
| +    if (temp > maxMultiplier ||
 | 
| +        (temp == maxMultiplier && digitValue > (intMax % base) + isNegative))
 | 
| +      return false;
 | 
| +    temp = temp * base + digitValue;
 | 
| +    ++position;
 | 
| +  } while (position < end && isASCIIDigit(*position));
 | 
|    // Step 9
 | 
| -  bool ok;
 | 
| -  if (digits.is8Bit())
 | 
| -    value = charactersToIntStrict(digits.characters8(), digits.length(), &ok);
 | 
| -  else
 | 
| -    value = charactersToIntStrict(digits.characters16(), digits.length(), &ok);
 | 
| -  return ok;
 | 
| +  value = isNegative ? (0 - temp) : temp;
 | 
| +  return true;
 | 
|  }
 | 
|  
 | 
|  // http://www.whatwg.org/specs/web-apps/current-work/#rules-for-parsing-integers
 | 
| 
 |