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

Commit 69b93ac0 authored by Gil Dekel's avatar Gil Dekel
Browse files

libs/ui: Fix implicit cast in parseEdid()

There is an implicit cast from int to uint32_t in parseEdid. Other than
being unsafe, it will cause an issue when moved to SF/Display (due to
SF's stricter build conditions).

Fix it by statically casting each edid read outcome into a uint32_t.

Bug: 415094050
Flag: EXEMPT refactor
Test: presubmit
Change-Id: I24247ede1bc10bbe9a07fd5cba617b3901ce8f86
parent 7fc648b2
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -206,9 +206,10 @@ std::optional<Edid> parseEdid(const DisplayIdentificationData& edid) {
        ALOGE("Invalid EDID: block zero S/N is truncated.");
        return {};
    }
    const uint32_t blockZeroSerialNumber = edid[kSerialNumberOffset] +
            (edid[kSerialNumberOffset + 1] << 8) + (edid[kSerialNumberOffset + 2] << 16) +
            (edid[kSerialNumberOffset + 3] << 24);
    const uint32_t blockZeroSerialNumber = static_cast<uint32_t>(edid[kSerialNumberOffset]) |
            (static_cast<uint32_t>(edid[kSerialNumberOffset + 1]) << 8) |
            (static_cast<uint32_t>(edid[kSerialNumberOffset + 2]) << 16) |
            (static_cast<uint32_t>(edid[kSerialNumberOffset + 3]) << 24);
    const auto hashedBlockZeroSNOpt = blockZeroSerialNumber == 0
            ? std::nullopt
            : ftl::stable_hash(std::string_view(std::to_string(blockZeroSerialNumber)));