- Revision
- 239688
- Author
- eric.carl...@apple.com
- Date
- 2019-01-07 11:59:21 -0800 (Mon, 07 Jan 2019)
Log Message
A MediaTime timescale must never be zero
https://bugs.webkit.org/show_bug.cgi?id=193156
<rdar://problem/32504501>
Reviewed by Jer Noble.
Source/WTF:
* wtf/MediaTime.cpp:
(WTF::greatestCommonDivisor): ASSERT if either parameter or return value is zero.
(WTF::MediaTime::MediaTime): Create +/- infinity if passed zero timescale.
(WTF::MediaTime::createWithFloat): Ditto.
(WTF::MediaTime::createWithDouble): Ditto.
(WTF::MediaTime::setTimeScale): Ditto.
Tools:
* TestWebKitAPI/Tests/WTF/MediaTime.cpp:
(TestWebKitAPI::TEST): Add tests for zero timescale.
Modified Paths
Diff
Modified: trunk/Source/WTF/ChangeLog (239687 => 239688)
--- trunk/Source/WTF/ChangeLog 2019-01-07 19:47:35 UTC (rev 239687)
+++ trunk/Source/WTF/ChangeLog 2019-01-07 19:59:21 UTC (rev 239688)
@@ -1,3 +1,18 @@
+2019-01-07 Eric Carlson <eric.carl...@apple.com>
+
+ A MediaTime timescale must never be zero
+ https://bugs.webkit.org/show_bug.cgi?id=193156
+ <rdar://problem/32504501>
+
+ Reviewed by Jer Noble.
+
+ * wtf/MediaTime.cpp:
+ (WTF::greatestCommonDivisor): ASSERT if either parameter or return value is zero.
+ (WTF::MediaTime::MediaTime): Create +/- infinity if passed zero timescale.
+ (WTF::MediaTime::createWithFloat): Ditto.
+ (WTF::MediaTime::createWithDouble): Ditto.
+ (WTF::MediaTime::setTimeScale): Ditto.
+
2019-01-02 Alex Christensen <achristen...@webkit.org>
Homograph with LATIN SMALL LETTER R WITH FISHHOOK
Modified: trunk/Source/WTF/wtf/MediaTime.cpp (239687 => 239688)
--- trunk/Source/WTF/wtf/MediaTime.cpp 2019-01-07 19:47:35 UTC (rev 239687)
+++ trunk/Source/WTF/wtf/MediaTime.cpp 2019-01-07 19:59:21 UTC (rev 239688)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 Apple Inc. All rights reserved.
+ * Copyright (C) 2012-2019 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -31,6 +31,7 @@
#include <algorithm>
#include <cstdlib>
+#include <wtf/Assertions.h>
#include <wtf/CheckedArithmetic.h>
#include <wtf/JSONValues.h>
#include <wtf/MathExtras.h>
@@ -41,6 +42,9 @@
static uint32_t greatestCommonDivisor(uint32_t a, uint32_t b)
{
+ ASSERT(a);
+ ASSERT(b);
+
// Euclid's Algorithm
uint32_t temp = 0;
while (b) {
@@ -48,6 +52,8 @@
b = a % b;
a = temp;
}
+
+ ASSERT(a);
return a;
}
@@ -75,6 +81,10 @@
, m_timeScale(scale)
, m_timeFlags(flags)
{
+ if (scale || isInvalid())
+ return;
+
+ *this = value < 0 ? negativeInfiniteTime() : positiveInfiniteTime();
}
MediaTime::~MediaTime()
@@ -108,6 +118,8 @@
return positiveInfiniteTime();
if (floatTime < std::numeric_limits<int64_t>::min())
return negativeInfiniteTime();
+ if (!timeScale)
+ return std::signbit(floatTime) ? negativeInfiniteTime() : positiveInfiniteTime();
while (floatTime * timeScale > std::numeric_limits<int64_t>::max())
timeScale /= 2;
@@ -136,6 +148,8 @@
return positiveInfiniteTime();
if (doubleTime < std::numeric_limits<int64_t>::min())
return negativeInfiniteTime();
+ if (!timeScale)
+ return std::signbit(doubleTime) ? negativeInfiniteTime() : positiveInfiniteTime();
while (doubleTime * timeScale > std::numeric_limits<int64_t>::max())
timeScale /= 2;
@@ -484,6 +498,11 @@
return;
}
+ if (!timeScale) {
+ *this = m_timeValue < 0 ? negativeInfiniteTime() : positiveInfiniteTime();
+ return;
+ }
+
if (timeScale == m_timeScale)
return;
Modified: trunk/Tools/ChangeLog (239687 => 239688)
--- trunk/Tools/ChangeLog 2019-01-07 19:47:35 UTC (rev 239687)
+++ trunk/Tools/ChangeLog 2019-01-07 19:59:21 UTC (rev 239688)
@@ -1,3 +1,14 @@
+2019-01-07 Eric Carlson <eric.carl...@apple.com>
+
+ A MediaTime timescale must never be zero
+ https://bugs.webkit.org/show_bug.cgi?id=193156
+ <rdar://problem/32504501>
+
+ Reviewed by Jer Noble.
+
+ * TestWebKitAPI/Tests/WTF/MediaTime.cpp:
+ (TestWebKitAPI::TEST): Add tests for zero timescale.
+
2019-01-07 Youenn Fablet <you...@apple.com>
API test broken: TestWebKitAPI.WebKit.CustomDataStorePathsVersusCompletionHandlers
Modified: trunk/Tools/TestWebKitAPI/Tests/WTF/MediaTime.cpp (239687 => 239688)
--- trunk/Tools/TestWebKitAPI/Tests/WTF/MediaTime.cpp 2019-01-07 19:47:35 UTC (rev 239687)
+++ trunk/Tools/TestWebKitAPI/Tests/WTF/MediaTime.cpp 2019-01-07 19:59:21 UTC (rev 239688)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 Apple Inc. All rights reserved.
+ * Copyright (C) 2012-2019 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -309,6 +309,18 @@
EXPECT_EQ(MediaTime(bigInt - 2, MediaTime::MaximumTimeScale).toTimeScale(MediaTime::MaximumTimeScale - 1).hasBeenRounded(), true);
EXPECT_EQ(MediaTime(bigInt, 1).toTimeScale(MediaTime::MaximumTimeScale), MediaTime::positiveInfiniteTime());
EXPECT_EQ(MediaTime(-bigInt, 1).toTimeScale(MediaTime::MaximumTimeScale), MediaTime::negativeInfiniteTime());
+
+ // Non-zero timescale
+ EXPECT_EQ(MediaTime(102, 0), MediaTime::positiveInfiniteTime());
+ EXPECT_EQ(MediaTime(-102, 0), MediaTime::negativeInfiniteTime());
+ EXPECT_EQ(MediaTime::createWithDouble(99, 0), MediaTime::positiveInfiniteTime());
+ EXPECT_EQ(MediaTime::createWithDouble(-99, 0), MediaTime::negativeInfiniteTime());
+ EXPECT_EQ(MediaTime::createWithDouble(99).toTimeScale(0), MediaTime::positiveInfiniteTime());
+ EXPECT_EQ(MediaTime::createWithDouble(-99).toTimeScale(0), MediaTime::negativeInfiniteTime());
+ EXPECT_EQ(MediaTime::createWithFloat(909, 0), MediaTime::positiveInfiniteTime());
+ EXPECT_EQ(MediaTime::createWithFloat(-909, 0), MediaTime::negativeInfiniteTime());
+ EXPECT_EQ(MediaTime::createWithFloat(999).toTimeScale(0), MediaTime::positiveInfiniteTime());
+ EXPECT_EQ(MediaTime::createWithFloat(-999).toTimeScale(0), MediaTime::negativeInfiniteTime());
}
}