diff options
| author | 2022-07-01 10:27:00 +0000 | |
|---|---|---|
| committer | 2022-08-18 07:19:02 +0000 | |
| commit | bd8329dae97615a8d6dbecabe289b7ed86f6795e (patch) | |
| tree | 076930a39da6e0da77ea265309206a49912d7c9d | |
| parent | bcdc02173eb62685206dff32dc92011eeda1e3cf (diff) | |
ThermalManagerService: validate input for getThermalHeadroom API
The getThermalHeadroom API only allows 0-60 seconds as the input
value. Return Float.NaN and print warning logs when users input
out-of-range values.
Add testcase testGetThermalHeadroomInputRange.
Bug: 235192825
Test: atest ThermalManagerServiceTest
Change-Id: I5d22672545961ff148be89620eecd9d03fbbdd29
| -rw-r--r-- | services/core/java/com/android/server/power/ThermalManagerService.java | 13 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java | 9 |
2 files changed, 22 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/power/ThermalManagerService.java b/services/core/java/com/android/server/power/ThermalManagerService.java index 96823c8ae9ab..f3785885e4ec 100644 --- a/services/core/java/com/android/server/power/ThermalManagerService.java +++ b/services/core/java/com/android/server/power/ThermalManagerService.java @@ -72,6 +72,12 @@ import java.util.concurrent.atomic.AtomicBoolean; public class ThermalManagerService extends SystemService { private static final String TAG = ThermalManagerService.class.getSimpleName(); + private static final boolean DEBUG = false; + + /** Input range limits for getThermalHeadroom API */ + public static final int MIN_FORECAST_SEC = 0; + public static final int MAX_FORECAST_SEC = 60; + /** Lock to protect listen list. */ private final Object mLock = new Object(); @@ -478,6 +484,13 @@ public class ThermalManagerService extends SystemService { return Float.NaN; } + if (forecastSeconds < MIN_FORECAST_SEC || forecastSeconds > MAX_FORECAST_SEC) { + if (DEBUG) { + Slog.d(TAG, "Invalid forecastSeconds: " + forecastSeconds); + } + return Float.NaN; + } + return mTemperatureWatcher.getForecast(forecastSeconds); } diff --git a/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java index 36e988f36577..3848babdc912 100644 --- a/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java @@ -381,6 +381,7 @@ public class ThermalManagerServiceTest { assertEquals(0, Arrays.asList(mService.mService.getCurrentTemperaturesWithType( Temperature.TYPE_SKIN)).size()); assertEquals(Temperature.THROTTLING_NONE, mService.mService.getCurrentThermalStatus()); + assertTrue(Float.isNaN(mService.mService.getThermalHeadroom(0))); } @Test @@ -397,6 +398,14 @@ public class ThermalManagerServiceTest { } @Test + public void testGetThermalHeadroomInputRange() throws RemoteException { + assertTrue(Float.isNaN(mService.mService.getThermalHeadroom( + ThermalManagerService.MIN_FORECAST_SEC - 1))); + assertTrue(Float.isNaN(mService.mService.getThermalHeadroom( + ThermalManagerService.MAX_FORECAST_SEC + 1))); + } + + @Test public void testTemperatureWatcherUpdateSevereThresholds() throws RemoteException { ThermalManagerService.TemperatureWatcher watcher = mService.mTemperatureWatcher; watcher.mSevereThresholds.erase(); |