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

Commit 511e11af authored by Rambo Wang's avatar Rambo Wang
Browse files

Do not allow null signal thresholds in SignalStrengthUpdateRequest

SignalStrengthUpdateRequest is designed to not allow null nor empty
signal thresholds for public apps.

To support system privileged app (Bluetooth) which is only interested
in requiring to report system thresholds while idle. An exemption was
made (aosp/1569861) which was to allow empty thresholds but the null
thresholds was also allowed by mistake. This will cause Bluetooth
crash if no signal thresholds are set.

To fix the issue, we only allow Bluetooth to set EMPTY thresholds
but not null one.

Bug: 205585585
Test: atest SignalStrengthUpdateRequestTest
Change-Id: I245ecb87ab807a6005b32fa320c8820a2c0b1a9e
parent 7d0bdd39
Loading
Loading
Loading
Loading
+7 −8
Original line number Original line Diff line number Diff line
@@ -71,12 +71,7 @@ public final class SignalStrengthUpdateRequest implements Parcelable {
            @Nullable List<SignalThresholdInfo> signalThresholdInfos,
            @Nullable List<SignalThresholdInfo> signalThresholdInfos,
            boolean isReportingRequestedWhileIdle,
            boolean isReportingRequestedWhileIdle,
            boolean isSystemThresholdReportingRequestedWhileIdle) {
            boolean isSystemThresholdReportingRequestedWhileIdle) {
        // System app (like Bluetooth) can specify the request to report system thresholds while
        validate(signalThresholdInfos, isSystemThresholdReportingRequestedWhileIdle);
        // device is idle (with permission protection). In this case, the request doesn't need to
        // provide a non-empty list of SignalThresholdInfo which is only asked for public apps.
        if (!isSystemThresholdReportingRequestedWhileIdle) {
            validate(signalThresholdInfos);
        }


        mSignalThresholdInfos = signalThresholdInfos;
        mSignalThresholdInfos = signalThresholdInfos;
        mIsReportingRequestedWhileIdle = isReportingRequestedWhileIdle;
        mIsReportingRequestedWhileIdle = isReportingRequestedWhileIdle;
@@ -274,8 +269,12 @@ public final class SignalStrengthUpdateRequest implements Parcelable {
     * Throw IAE if SignalThresholdInfo collection is null or empty,
     * Throw IAE if SignalThresholdInfo collection is null or empty,
     * or the SignalMeasurementType for the same RAN in the collection is not unique.
     * or the SignalMeasurementType for the same RAN in the collection is not unique.
     */
     */
    private static void validate(Collection<SignalThresholdInfo> infos) {
    private static void validate(Collection<SignalThresholdInfo> infos,
        if (infos == null || infos.isEmpty()) {
            boolean isSystemThresholdReportingRequestedWhileIdle) {
        // System app (like Bluetooth) can specify the request to report system thresholds while
        // device is idle (with permission protection). In this case, the request doesn't need to
        // provide a non-empty list of SignalThresholdInfo which is only asked for public apps.
        if (infos == null || (infos.isEmpty() && !isSystemThresholdReportingRequestedWhileIdle)) {
            throw new IllegalArgumentException("SignalThresholdInfo collection is null or empty");
            throw new IllegalArgumentException("SignalThresholdInfo collection is null or empty");
        }
        }