Index: Source/core/html/track/vtt/VTTScanner.cpp |
diff --git a/Source/core/html/track/vtt/VTTScanner.cpp b/Source/core/html/track/vtt/VTTScanner.cpp |
index fd6a662d8f43930ae4781b5d0b6698ec7e2574e3..590178f886450149786f234b05195c4932c82f4d 100644 |
--- a/Source/core/html/track/vtt/VTTScanner.cpp |
+++ b/Source/core/html/track/vtt/VTTScanner.cpp |
@@ -139,4 +139,33 @@ unsigned VTTScanner::scanDigits(int& number) |
return numDigits; |
} |
+bool VTTScanner::scanFloat(float& number) |
+{ |
+ Run integerRun = collectWhile<isASCIIDigit>(); |
+ seekTo(integerRun.end()); |
+ Run decimalRun(position(), position(), m_is8Bit); |
+ if (scan('.')) { |
+ decimalRun = collectWhile<isASCIIDigit>(); |
+ seekTo(decimalRun.end()); |
+ } |
+ |
+ // At least one digit required. |
+ if (integerRun.isEmpty() && decimalRun.isEmpty()) { |
+ // Restore to starting position. |
+ seekTo(integerRun.start()); |
+ return false; |
Mike West
2014/01/21 07:59:24
Here you return false without setting `number`. At
fs
2014/01/21 08:19:57
Intentional, yes. At this point, we have not manag
|
+ } |
+ |
+ size_t lengthOfFloat = Run(integerRun.start(), position(), m_is8Bit).length(); |
+ bool validNumber; |
+ if (m_is8Bit) |
+ number = charactersToFloat(integerRun.start(), lengthOfFloat, &validNumber); |
+ else |
+ number = charactersToFloat(reinterpret_cast<const UChar*>(integerRun.start()), lengthOfFloat, &validNumber); |
+ |
+ if (!validNumber) |
+ number = std::numeric_limits<float>::max(); |
+ return true; |
+} |
+ |
} |