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

Commit 1f58ac53 authored by Ivan Lozano's avatar Ivan Lozano
Browse files

Fix sanitizer in setViewportAndProjection.

On integer sanitized builds calculating b (and possibly t) throws a
runtime error due to an unsigned integer overflow occuring.

 runtime error: unsigned integer overflow: 1024 - 1920 cannot be
 represented in type 'unsigned long'

This changes the type of b (and others) to int32_t, which matches the
types in Rect and can store the negative results above without
overflowing.

Bug: 30969751
Test: Compiles, surfaceflinger tests pass.
Change-Id: Ifb45e3c7e14a2f782412e65d56e462e7df37faba
parent 95f40fb2
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -154,12 +154,12 @@ size_t GLES20RenderEngine::getMaxViewportDims() const {
void GLES20RenderEngine::setViewportAndProjection(size_t vpw, size_t vph, Rect sourceCrop,
                                                  size_t hwh, bool yswap,
                                                  Transform::orientation_flags rotation) {
    size_t l = sourceCrop.left;
    size_t r = sourceCrop.right;
    int32_t l = sourceCrop.left;
    int32_t r = sourceCrop.right;

    // In GL, (0, 0) is the bottom-left corner, so flip y coordinates
    size_t t = hwh - sourceCrop.top;
    size_t b = hwh - sourceCrop.bottom;
    int32_t t = hwh - sourceCrop.top;
    int32_t b = hwh - sourceCrop.bottom;

    mat4 m;
    if (yswap) {