Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6cac5567 authored by Valerie Hau's avatar Valerie Hau
Browse files

Fixing crash on allocation

Bug: 142767215
Test: build, boot, GraphicBufferAllocator_test
Change-Id: I29b9f4c84cee9a35bc79fb27859fc7d270ab7006
(cherry picked from commit e64b877b)
parent 587484f3
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -136,7 +136,8 @@ status_t GraphicBufferAllocator::allocate(uint32_t width, uint32_t height,

    // if stride has no meaning or is too large,
    // approximate size with the input width instead
    if (std::numeric_limits<size_t>::max() / height / (*stride) < static_cast<size_t>(bpp)) {
    if ((*stride) != 0 &&
        std::numeric_limits<size_t>::max() / height / (*stride) < static_cast<size_t>(bpp)) {
        bufSize = static_cast<size_t>(width) * height * bpp;
    } else {
        bufSize = static_cast<size_t>((*stride)) * height * bpp;
+15 −1
Original line number Diff line number Diff line
@@ -76,7 +76,21 @@ TEST_F(GraphicBufferAllocatorTest, AllocateNoError) {
    ASSERT_EQ(kTestWidth, stride);
}

TEST_F(GraphicBufferAllocatorTest, AllocateBadStride) {
TEST_F(GraphicBufferAllocatorTest, AllocateZeroStride) {
    android::PixelFormat format = PIXEL_FORMAT_RGBA_8888;
    uint32_t expectedStride = 0;

    mAllocator.setUpAllocateExpectations(NO_ERROR, expectedStride);
    uint32_t stride = 0;
    buffer_handle_t handle;
    // a divide by zero would cause a crash
    status_t err = mAllocator.allocate(kTestWidth, kTestHeight, format, kTestLayerCount, kTestUsage,
                                       &handle, &stride, 0, "GraphicBufferAllocatorTest");
    ASSERT_EQ(NO_ERROR, err);
    ASSERT_EQ(expectedStride, stride);
}

TEST_F(GraphicBufferAllocatorTest, AllocateLargeStride) {
    uint32_t height = std::numeric_limits<uint32_t>::max();
    uint32_t bpp = 4;
    android::PixelFormat format = PIXEL_FORMAT_RGBA_8888;