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

Commit 20b47da5 authored by Lais Andrade's avatar Lais Andrade
Browse files

Check mode/boost index before accessing cached support value

Bug: 174243830
Test: manual
Change-Id: I2f81bcd57181791fa95d35ad52e6af2d7d9c8dcf
Merged-In: If305a4b694a9d6fcc27da8279f1f53f9fd9cb685
Merged-In: I345d9ff828021da35556f2d51da512840dda8026
parent 065fbe9c
Loading
Loading
Loading
Loading
+8 −10
Original line number Diff line number Diff line
@@ -190,19 +190,18 @@ static void setPowerBoostWithHandle(sp<IPowerAidl> handle, Boost boost, int32_t
    static std::array<std::atomic<HalSupport>,
                      static_cast<int32_t>(Boost::DISPLAY_UPDATE_IMMINENT) + 1>
            boostSupportedArray = {HalSupport::UNKNOWN};
    size_t idx = static_cast<size_t>(boost);

    // Quick return if boost is not supported by HAL
    if (boost > Boost::DISPLAY_UPDATE_IMMINENT ||
        boostSupportedArray[static_cast<int32_t>(boost)] == HalSupport::OFF) {
    if (idx >= boostSupportedArray.size() || boostSupportedArray[idx] == HalSupport::OFF) {
        ALOGV("Skipped setPowerBoost %s because HAL doesn't support it", toString(boost).c_str());
        return;
    }

    if (boostSupportedArray[static_cast<int32_t>(boost)] == HalSupport::UNKNOWN) {
    if (boostSupportedArray[idx] == HalSupport::UNKNOWN) {
        bool isSupported = false;
        handle->isBoostSupported(boost, &isSupported);
        boostSupportedArray[static_cast<int32_t>(boost)] =
            isSupported ? HalSupport::ON : HalSupport::OFF;
        boostSupportedArray[idx] = isSupported ? HalSupport::ON : HalSupport::OFF;
        if (!isSupported) {
            ALOGV("Skipped setPowerBoost %s because HAL doesn't support it",
                  toString(boost).c_str());
@@ -230,19 +229,18 @@ static bool setPowerModeWithHandle(sp<IPowerAidl> handle, Mode mode, bool enable
    // Need to increase the array if more mode supported.
    static std::array<std::atomic<HalSupport>, static_cast<int32_t>(Mode::DISPLAY_INACTIVE) + 1>
            modeSupportedArray = {HalSupport::UNKNOWN};
    size_t idx = static_cast<size_t>(mode);

    // Quick return if mode is not supported by HAL
    if (mode > Mode::DISPLAY_INACTIVE ||
        modeSupportedArray[static_cast<int32_t>(mode)] == HalSupport::OFF) {
    if (idx >= modeSupportedArray.size() || modeSupportedArray[idx] == HalSupport::OFF) {
        ALOGV("Skipped setPowerMode %s because HAL doesn't support it", toString(mode).c_str());
        return false;
    }

    if (modeSupportedArray[static_cast<int32_t>(mode)] == HalSupport::UNKNOWN) {
    if (modeSupportedArray[idx] == HalSupport::UNKNOWN) {
        bool isSupported = false;
        handle->isModeSupported(mode, &isSupported);
        modeSupportedArray[static_cast<int32_t>(mode)] =
            isSupported ? HalSupport::ON : HalSupport::OFF;
        modeSupportedArray[idx] = isSupported ? HalSupport::ON : HalSupport::OFF;
        if (!isSupported) {
            ALOGV("Skipped setPowerMode %s because HAL doesn't support it", toString(mode).c_str());
            return false;