Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add using WTF::isInBounds to CheckedArithmetic.h
<https://webkit.org/b/210299>

Reviewed by Darin Adler.

Source/WebCore:

* fileapi/Blob.cpp:
(WebCore::Blob::size const):
* page/PointerCaptureController.cpp:
(WebCore::PointerCaptureController::elementWasRemoved):
* platform/graphics/ImageSource.cpp:
(WebCore::ImageSource::cacheNativeImageAtIndex):
* platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm:
(WebCore::tryGetResourceAsBufferBinding):
- Remove WTF:: prefix from isInBounds().

Source/WebKit:

* Platform/IPC/ArgumentCoders.h:
* Shared/UserData.cpp:
(WebKit::UserData::decode):
- Remove WTF:: prefix from isInBounds().

Source/WTF:

* wtf/CheckedArithmetic.h:
- Add `using WTF::isInBounds` statement so this function may be
  used unprefixed outside the WTF project.

Tools:

* TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
(TestWebKitAPI::TEST):
- Remove WTF:: prefix from isInBounds().


Canonical link: https://commits.webkit.org/223192@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@259833 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
ddkilzer committed Apr 9, 2020
1 parent 2554598 commit 4619950
Show file tree
Hide file tree
Showing 12 changed files with 99 additions and 47 deletions.
11 changes: 11 additions & 0 deletions Source/WTF/ChangeLog
@@ -1,3 +1,14 @@
2020-04-09 David Kilzer <ddkilzer@apple.com>

Add using WTF::isInBounds to CheckedArithmetic.h
<https://webkit.org/b/210299>

Reviewed by Darin Adler.

* wtf/CheckedArithmetic.h:
- Add `using WTF::isInBounds` statement so this function may be
used unprefixed outside the WTF project.

2020-04-09 David Kilzer <ddkilzer@apple.com>

WTF::Persistence::Coder and WTF::Persistence::Decoder should use WARN_UNUSED_RETURN
Expand Down
1 change: 1 addition & 0 deletions Source/WTF/wtf/CheckedArithmetic.h
Expand Up @@ -1006,5 +1006,6 @@ using WTF::CrashOnOverflow;
using WTF::RecordOverflow;
using WTF::checkedSum;
using WTF::differenceOverflows;
using WTF::isInBounds;
using WTF::productOverflows;
using WTF::sumOverflows;
17 changes: 17 additions & 0 deletions Source/WebCore/ChangeLog
@@ -1,3 +1,20 @@
2020-04-09 David Kilzer <ddkilzer@apple.com>

Add using WTF::isInBounds to CheckedArithmetic.h
<https://webkit.org/b/210299>

Reviewed by Darin Adler.

* fileapi/Blob.cpp:
(WebCore::Blob::size const):
* page/PointerCaptureController.cpp:
(WebCore::PointerCaptureController::elementWasRemoved):
* platform/graphics/ImageSource.cpp:
(WebCore::ImageSource::cacheNativeImageAtIndex):
* platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm:
(WebCore::tryGetResourceAsBufferBinding):
- Remove WTF:: prefix from isInBounds().

2020-04-09 Andres Gonzalez <andresg_22@apple.com>

Fix for crash in test accessibility/mac/aria-grid-with-strange-hierarchy.html in isolated tree mode.
Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/fileapi/Blob.cpp
Expand Up @@ -162,7 +162,7 @@ unsigned long long Blob::size() const
// FIXME: JavaScript cannot represent sizes as large as unsigned long long, we need to
// come up with an exception to throw if file size is not representable.
unsigned long long actualSize = ThreadableBlobRegistry::blobSize(m_internalURL);
m_size = WTF::isInBounds<long long>(actualSize) ? actualSize : 0;
m_size = isInBounds<long long>(actualSize) ? actualSize : 0;
}

return *m_size;
Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/page/PointerCaptureController.cpp
Expand Up @@ -144,7 +144,7 @@ void PointerCaptureController::elementWasRemoved(Element& element)
// When the pointer capture target override is no longer connected, the pending pointer capture target override and pointer capture target
// override nodes SHOULD be cleared and also a PointerEvent named lostpointercapture corresponding to the captured pointer SHOULD be fired
// at the document.
ASSERT(WTF::isInBounds<PointerID>(keyAndValue.key));
ASSERT(isInBounds<PointerID>(keyAndValue.key));
auto pointerId = static_cast<PointerID>(keyAndValue.key);
auto pointerType = capturingData.pointerType;
releasePointerCapture(&element, pointerId);
Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/platform/graphics/ImageSource.cpp
Expand Up @@ -288,7 +288,7 @@ void ImageSource::cacheNativeImageAtIndex(NativeImagePtr&& nativeImage, size_t i

// Do not cache the NativeImage if adding its frameByes to the MemoryCache will cause numerical overflow.
size_t frameBytes = size().unclampedArea() * sizeof(uint32_t);
if (!WTF::isInBounds<unsigned>(frameBytes + decodedSize()))
if (!isInBounds<unsigned>(frameBytes + decodedSize()))
return;

// Move the new image to the cache.
Expand Down
Expand Up @@ -55,12 +55,12 @@
LOG(WebGPU, "%s: Invalid MTLBuffer in GPUBufferBinding!", functionName);
return WTF::nullopt;
}
if (!WTF::isInBounds<NSUInteger>(bufferBinding.size) || bufferBinding.size > bufferBinding.buffer->byteLength()) {
if (!isInBounds<NSUInteger>(bufferBinding.size) || bufferBinding.size > bufferBinding.buffer->byteLength()) {
LOG(WebGPU, "%s: GPUBufferBinding size is too large!", functionName);
return WTF::nullopt;
}
// MTLBuffer size (NSUInteger) is 32 bits on some platforms.
if (!WTF::isInBounds<NSUInteger>(bufferBinding.offset)) {
if (!isInBounds<NSUInteger>(bufferBinding.offset)) {
LOG(WebGPU, "%s: Buffer offset is too large!", functionName);
return WTF::nullopt;
}
Expand Down
12 changes: 12 additions & 0 deletions Source/WebKit/ChangeLog
@@ -1,3 +1,15 @@
2020-04-09 David Kilzer <ddkilzer@apple.com>

Add using WTF::isInBounds to CheckedArithmetic.h
<https://webkit.org/b/210299>

Reviewed by Darin Adler.

* Platform/IPC/ArgumentCoders.h:
* Shared/UserData.cpp:
(WebKit::UserData::decode):
- Remove WTF:: prefix from isInBounds().

2020-04-09 Keith Rollin <krollin@apple.com>

Set ENTITLEMENTS_REQUIRED=NO for some Xcode build targets
Expand Down
4 changes: 2 additions & 2 deletions Source/WebKit/Platform/IPC/ArgumentCoders.h
Expand Up @@ -372,7 +372,7 @@ template<typename T, size_t inlineCapacity, typename OverflowHandler, size_t min
return false;
}

if (!WTF::isInBounds<size_t>(decodedSize)) {
if (!isInBounds<size_t>(decodedSize)) {
decoder.markInvalid();
return false;
}
Expand Down Expand Up @@ -407,7 +407,7 @@ template<typename T, size_t inlineCapacity, typename OverflowHandler, size_t min
return WTF::nullopt;
}

if (!WTF::isInBounds<size_t>(decodedSize)) {
if (!isInBounds<size_t>(decodedSize)) {
decoder.markInvalid();
return WTF::nullopt;
}
Expand Down
4 changes: 2 additions & 2 deletions Source/WebKit/Shared/UserData.cpp
Expand Up @@ -345,7 +345,7 @@ bool UserData::decode(IPC::Decoder& decoder, RefPtr<API::Object>& result)
if (!decoder.decode(decodedSize))
return false;

if (!WTF::isInBounds<size_t>(decodedSize))
if (!isInBounds<size_t>(decodedSize))
return false;

auto size = static_cast<size_t>(decodedSize);
Expand Down Expand Up @@ -386,7 +386,7 @@ bool UserData::decode(IPC::Decoder& decoder, RefPtr<API::Object>& result)
if (!decoder.decode(decodedSize))
return false;

if (!WTF::isInBounds<size_t>(decodedSize))
if (!isInBounds<size_t>(decodedSize))
return false;

auto size = static_cast<size_t>(decodedSize);
Expand Down
11 changes: 11 additions & 0 deletions Tools/ChangeLog
@@ -1,3 +1,14 @@
2020-04-09 David Kilzer <ddkilzer@apple.com>

Add using WTF::isInBounds to CheckedArithmetic.h
<https://webkit.org/b/210299>

Reviewed by Darin Adler.

* TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp:
(TestWebKitAPI::TEST):
- Remove WTF:: prefix from isInBounds().

2020-04-09 Keith Rollin <krollin@apple.com>

Set ENTITLEMENTS_REQUIRED=NO for some Xcode build targets
Expand Down
76 changes: 38 additions & 38 deletions Tools/TestWebKitAPI/Tests/WTF/CheckedArithmeticOperations.cpp
Expand Up @@ -431,59 +431,59 @@ CheckedArithmeticTest(uint64_t, CoerceLiteralToUnsigned, IgnoreMixedSignednessTe
TEST(CheckedArithmeticTest, IsInBounds)
{
// bigger precision, signed, signed
EXPECT_TRUE(WTF::isInBounds<int32_t>(std::numeric_limits<int16_t>::max()));
EXPECT_TRUE(WTF::isInBounds<int32_t>(std::numeric_limits<int16_t>::min()));
EXPECT_TRUE(isInBounds<int32_t>(std::numeric_limits<int16_t>::max()));
EXPECT_TRUE(isInBounds<int32_t>(std::numeric_limits<int16_t>::min()));

// bigger precision, unsigned, signed
EXPECT_TRUE(WTF::isInBounds<uint32_t>(std::numeric_limits<int32_t>::max()));
EXPECT_FALSE(WTF::isInBounds<uint32_t>(std::numeric_limits<int16_t>::min()));
EXPECT_TRUE(isInBounds<uint32_t>(std::numeric_limits<int32_t>::max()));
EXPECT_FALSE(isInBounds<uint32_t>(std::numeric_limits<int16_t>::min()));

EXPECT_FALSE(WTF::isInBounds<uint32_t>((int32_t)-1));
EXPECT_FALSE(WTF::isInBounds<uint16_t>((int32_t)-1));
EXPECT_FALSE(WTF::isInBounds<unsigned long>((int)-1));
EXPECT_FALSE(isInBounds<uint32_t>((int32_t)-1));
EXPECT_FALSE(isInBounds<uint16_t>((int32_t)-1));
EXPECT_FALSE(isInBounds<unsigned long>((int)-1));

EXPECT_TRUE(WTF::isInBounds<uint32_t>((int32_t)1));
EXPECT_TRUE(WTF::isInBounds<uint32_t>((int16_t)1));
EXPECT_TRUE(WTF::isInBounds<unsigned>((int)1));
EXPECT_TRUE(isInBounds<uint32_t>((int32_t)1));
EXPECT_TRUE(isInBounds<uint32_t>((int16_t)1));
EXPECT_TRUE(isInBounds<unsigned>((int)1));

EXPECT_TRUE(WTF::isInBounds<uint32_t>((int32_t)0));
EXPECT_TRUE(WTF::isInBounds<uint16_t>((int32_t)0));
EXPECT_TRUE(WTF::isInBounds<uint32_t>((int16_t)0));
EXPECT_TRUE(WTF::isInBounds<unsigned>((int)0));
EXPECT_TRUE(isInBounds<uint32_t>((int32_t)0));
EXPECT_TRUE(isInBounds<uint16_t>((int32_t)0));
EXPECT_TRUE(isInBounds<uint32_t>((int16_t)0));
EXPECT_TRUE(isInBounds<unsigned>((int)0));

EXPECT_TRUE(WTF::isInBounds<uint32_t>(std::numeric_limits<int32_t>::max()));
EXPECT_TRUE(WTF::isInBounds<uint32_t>(std::numeric_limits<int16_t>::max()));
EXPECT_TRUE(WTF::isInBounds<unsigned>(std::numeric_limits<int>::max()));
EXPECT_TRUE(isInBounds<uint32_t>(std::numeric_limits<int32_t>::max()));
EXPECT_TRUE(isInBounds<uint32_t>(std::numeric_limits<int16_t>::max()));
EXPECT_TRUE(isInBounds<unsigned>(std::numeric_limits<int>::max()));

// bigger precision, signed, unsigned
EXPECT_TRUE(WTF::isInBounds<int32_t>(std::numeric_limits<uint16_t>::max()));
EXPECT_FALSE(WTF::isInBounds<int32_t>(std::numeric_limits<uint32_t>::max()));
EXPECT_TRUE(WTF::isInBounds<int32_t>((uint32_t)0));
EXPECT_TRUE(isInBounds<int32_t>(std::numeric_limits<uint16_t>::max()));
EXPECT_FALSE(isInBounds<int32_t>(std::numeric_limits<uint32_t>::max()));
EXPECT_TRUE(isInBounds<int32_t>((uint32_t)0));

// bigger precision, unsigned, unsigned
EXPECT_TRUE(WTF::isInBounds<uint32_t>(std::numeric_limits<uint16_t>::max()));
EXPECT_TRUE(WTF::isInBounds<uint32_t>(std::numeric_limits<uint16_t>::min()));
EXPECT_TRUE(isInBounds<uint32_t>(std::numeric_limits<uint16_t>::max()));
EXPECT_TRUE(isInBounds<uint32_t>(std::numeric_limits<uint16_t>::min()));

// lower precision, signed signed
EXPECT_FALSE(WTF::isInBounds<int16_t>(std::numeric_limits<int32_t>::max()));
EXPECT_FALSE(WTF::isInBounds<int16_t>(std::numeric_limits<int32_t>::min()));
EXPECT_TRUE(WTF::isInBounds<int16_t>((int32_t)-1));
EXPECT_TRUE(WTF::isInBounds<int16_t>((int32_t)0));
EXPECT_TRUE(WTF::isInBounds<int16_t>((int32_t)1));
EXPECT_FALSE(isInBounds<int16_t>(std::numeric_limits<int32_t>::max()));
EXPECT_FALSE(isInBounds<int16_t>(std::numeric_limits<int32_t>::min()));
EXPECT_TRUE(isInBounds<int16_t>((int32_t)-1));
EXPECT_TRUE(isInBounds<int16_t>((int32_t)0));
EXPECT_TRUE(isInBounds<int16_t>((int32_t)1));
// lower precision, unsigned, signed
EXPECT_FALSE(WTF::isInBounds<uint16_t>(std::numeric_limits<int32_t>::max()));
EXPECT_FALSE(WTF::isInBounds<uint16_t>(std::numeric_limits<int32_t>::min()));
EXPECT_FALSE(WTF::isInBounds<uint16_t>((int32_t)-1));
EXPECT_TRUE(WTF::isInBounds<uint16_t>((int32_t)0));
EXPECT_TRUE(WTF::isInBounds<uint16_t>((int32_t)1));
EXPECT_FALSE(isInBounds<uint16_t>(std::numeric_limits<int32_t>::max()));
EXPECT_FALSE(isInBounds<uint16_t>(std::numeric_limits<int32_t>::min()));
EXPECT_FALSE(isInBounds<uint16_t>((int32_t)-1));
EXPECT_TRUE(isInBounds<uint16_t>((int32_t)0));
EXPECT_TRUE(isInBounds<uint16_t>((int32_t)1));
// lower precision, signed, unsigned
EXPECT_FALSE(WTF::isInBounds<int16_t>(std::numeric_limits<uint32_t>::max()));
EXPECT_TRUE(WTF::isInBounds<int16_t>((uint32_t)0));
EXPECT_TRUE(WTF::isInBounds<int16_t>((uint32_t)1));
EXPECT_FALSE(isInBounds<int16_t>(std::numeric_limits<uint32_t>::max()));
EXPECT_TRUE(isInBounds<int16_t>((uint32_t)0));
EXPECT_TRUE(isInBounds<int16_t>((uint32_t)1));
// lower precision, unsigned, unsigned
EXPECT_FALSE(WTF::isInBounds<uint16_t>(std::numeric_limits<uint32_t>::max()));
EXPECT_TRUE(WTF::isInBounds<uint16_t>((uint32_t)0));
EXPECT_TRUE(WTF::isInBounds<uint16_t>((uint32_t)1));
EXPECT_FALSE(isInBounds<uint16_t>(std::numeric_limits<uint32_t>::max()));
EXPECT_TRUE(isInBounds<uint16_t>((uint32_t)0));
EXPECT_TRUE(isInBounds<uint16_t>((uint32_t)1));
}

} // namespace TestWebKitAPI

0 comments on commit 4619950

Please sign in to comment.