Add null check in ImageBufferData::getData
authordino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 19 Aug 2015 01:55:15 +0000 (01:55 +0000)
committerdino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 19 Aug 2015 01:55:15 +0000 (01:55 +0000)
https://bugs.webkit.org/show_bug.cgi?id=148156
<rdar://problem/22337157>

Reviewed by Simon Fraser.

We're getting a number of crash reports that suggest the allocation
of the result buffer has failed, but have been unable to reproduce.
This patch adds a null check to the allocation, and logs a message
to the system console. This might avoid the crashes, and hopefully
we'll see the message.

No new tests, since we're unable to reproduce this crash.

* platform/graphics/cg/ImageBufferDataCG.cpp:
(WebCore::ImageBufferData::getData): Add a null-check and early
return.

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

Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp

index b070f9c5fa2404d5976eca5d3fb66230a124a28f..4f9e0cb06ab0fab096b364b37cac0155c2490be4 100644 (file)
@@ -1,3 +1,23 @@
+2015-08-18  Dean Jackson  <dino@apple.com>
+
+        Add null check in ImageBufferData::getData
+        https://bugs.webkit.org/show_bug.cgi?id=148156
+        <rdar://problem/22337157>
+
+        Reviewed by Simon Fraser.
+
+        We're getting a number of crash reports that suggest the allocation
+        of the result buffer has failed, but have been unable to reproduce.
+        This patch adds a null check to the allocation, and logs a message
+        to the system console. This might avoid the crashes, and hopefully
+        we'll see the message.
+
+        No new tests, since we're unable to reproduce this crash.
+
+        * platform/graphics/cg/ImageBufferDataCG.cpp:
+        (WebCore::ImageBufferData::getData): Add a null-check and early
+        return.
+
 2015-08-18  Chris Dumez  <cdumez@apple.com>
 
         Use CSSValuePool::singleton() instead of cssValuePool()
index 51186817ce64eb3ce51ee7ee03df2f3d04d63b89..475c68b9bad4f5ab84a90011fd2c80c9228de9b4 100644 (file)
@@ -97,7 +97,11 @@ RefPtr<Uint8ClampedArray> ImageBufferData::getData(const IntRect& rect, const In
 
     RefPtr<Uint8ClampedArray> result = Uint8ClampedArray::createUninitialized(area.unsafeGet());
     unsigned char* resultData = result->data();
-    
+    if (!resultData) {
+        WTFLogAlways("ImageBufferData: Unable to create buffer. Requested size was %d x %d = %u\n", rect.width(), rect.height(), area.unsafeGet());
+        return nullptr;
+    }
+
     Checked<int> endx = rect.maxX();
     endx *= ceilf(resolutionScale);
     Checked<int> endy = rect.maxY();