Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(771)

Unified Diff: Source/core/html/track/vtt/VTTParser.cpp

Issue 101513002: Add new helper VTTParser::collectDigitsToInt (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebased Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/html/track/vtt/VTTParser.cpp
diff --git a/Source/core/html/track/vtt/VTTParser.cpp b/Source/core/html/track/vtt/VTTParser.cpp
index 08a1b974d6882cdcb1573a96de5666c282f6c16d..f6b0e52e41fc2506236f6a4372952f1f9b2efccc 100644
--- a/Source/core/html/track/vtt/VTTParser.cpp
+++ b/Source/core/html/track/vtt/VTTParser.cpp
@@ -54,6 +54,20 @@ String VTTParser::collectDigits(const String& input, unsigned* position)
return digits.toString();
}
+unsigned VTTParser::collectDigitsToInt(const String& input, unsigned* position, int& number)
+{
+ String digits = collectDigits(input, position);
+ bool validNumber;
+ number = digits.toInt(&validNumber);
+ // Since we know that |digits| only contain valid (ASCII) digits
+ // (disregarding the 'empty' case), the remaining failure mode for toInt()
+ // is overflow, so if |validNumber| is not true, then set |number| to the
+ // maximum int value.
+ if (!digits.isEmpty() && !validNumber)
+ number = std::numeric_limits<int>::max();
+ return digits.length();
+}
+
String VTTParser::collectWord(const String& input, unsigned* position)
{
StringBuilder string;
@@ -62,6 +76,12 @@ String VTTParser::collectWord(const String& input, unsigned* position)
return string.toString();
}
+void VTTParser::skipWhiteSpace(const String& line, unsigned* position)
+{
+ while (*position < line.length() && isASpace(line[*position]))
+ (*position)++;
+}
+
float VTTParser::parseFloatPercentageValue(const String& value, bool& isValidSetting)
{
// '%' must be present and at the end of the setting value.
@@ -451,12 +471,10 @@ double VTTParser::collectTimeStamp(const String& line, unsigned* position)
if (*position >= line.length() || !isASCIIDigit(line[*position]))
return malformedTime;
- // Steps 5 - 6 - Collect a sequence of characters that are 0-9.
- String digits1 = collectDigits(line, position);
- int value1 = digits1.toInt();
-
- // Step 7 - If not 2 characters or value is greater than 59, interpret as hours.
- if (digits1.length() != 2 || value1 > 59)
+ int value1;
+ // Steps 5 - 7 - Collect a sequence of characters that are 0-9.
+ // If not 2 characters or value is greater than 59, interpret as hours.
+ if (collectDigitsToInt(line, position, value1) != 2 || value1 > 59)
mode = Hours;
// Steps 8 - 11 - Collect the next sequence of 0-9 after ':' (must be 2 chars).
@@ -464,9 +482,8 @@ double VTTParser::collectTimeStamp(const String& line, unsigned* position)
return malformedTime;
if (*position >= line.length() || !isASCIIDigit(line[(*position)]))
return malformedTime;
- String digits2 = collectDigits(line, position);
- int value2 = digits2.toInt();
- if (digits2.length() != 2)
+ int value2;
+ if (collectDigitsToInt(line, position, value2) != 2)
return malformedTime;
// Step 12 - Detect whether this timestamp includes hours.
@@ -476,10 +493,8 @@ double VTTParser::collectTimeStamp(const String& line, unsigned* position)
return malformedTime;
if (*position >= line.length() || !isASCIIDigit(line[*position]))
return malformedTime;
- String digits3 = collectDigits(line, position);
- if (digits3.length() != 2)
+ if (collectDigitsToInt(line, position, value3) != 2)
return malformedTime;
- value3 = digits3.toInt();
} else {
value3 = value2;
value2 = value1;
@@ -491,10 +506,9 @@ double VTTParser::collectTimeStamp(const String& line, unsigned* position)
return malformedTime;
if (*position >= line.length() || !isASCIIDigit(line[*position]))
return malformedTime;
- String digits4 = collectDigits(line, position);
- if (digits4.length() != 3)
+ int value4;
+ if (collectDigitsToInt(line, position, value4) != 3)
return malformedTime;
- int value4 = digits4.toInt();
if (value2 > 59 || value3 > 59)
return malformedTime;
@@ -607,11 +621,5 @@ void VTTTreeBuilder::constructTreeFromToken(Document& document)
}
}
-void VTTParser::skipWhiteSpace(const String& line, unsigned* position)
-{
- while (*position < line.length() && isASpace(line[*position]))
- (*position)++;
-}
-
}

Powered by Google App Engine
This is Rietveld 408576698