Harden WTF::ByteArray::create()
authorweinig@apple.com <weinig@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 15 Apr 2012 00:43:38 +0000 (00:43 +0000)
committerweinig@apple.com <weinig@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 15 Apr 2012 00:43:38 +0000 (00:43 +0000)
https://bugs.webkit.org/show_bug.cgi?id=83318

Reviewed by Maciej Stachowiak.

* wtf/ByteArray.cpp:
(WTF::ByteArray::create):
Add overflow check. I don't believe there is anyway to trigger this currently,
hence no tests, so this should be considered hardening.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@114209 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WTF/ChangeLog
Source/WTF/wtf/ByteArray.cpp

index 6a3c15f..86375a9 100644 (file)
@@ -1,3 +1,15 @@
+2012-04-14  Sam Weinig  <sam@webkit.org>
+
+        Harden WTF::ByteArray::create()
+        https://bugs.webkit.org/show_bug.cgi?id=83318
+
+        Reviewed by Maciej Stachowiak.
+
+        * wtf/ByteArray.cpp:
+        (WTF::ByteArray::create):
+        Add overflow check. I don't believe there is anyway to trigger this currently,
+        hence no tests, so this should be considered hardening.
+
 2012-04-12  Benjamin Poulain  <bpoulain@apple.com>
 
         Inline StringImpl::find(UChar, ...)
index 80c603f..dd400c7 100644 (file)
@@ -32,6 +32,9 @@ namespace WTF {
 
 PassRefPtr<ByteArray> ByteArray::create(size_t size)
 {
+    if (size > (std::numeric_limits<size_t>::max() - OBJECT_OFFSETOF(ByteArray, m_data)))
+        CRASH();
+
     unsigned char* buffer = new unsigned char[size + OBJECT_OFFSETOF(ByteArray, m_data)];
     ASSERT((reinterpret_cast<size_t>(buffer) & 3) == 0);
     return adoptRef(new (NotNull, buffer) ByteArray(size));