diff options
| author | 2024-08-12 22:27:38 +0000 | |
|---|---|---|
| committer | 2024-08-12 22:27:38 +0000 | |
| commit | b6eb5b62ff0f7ad18b1a6e8509e42afb8620a560 (patch) | |
| tree | 676609b9ae1a99a8d1431df981b950767e0af969 | |
| parent | bafc1f5a4e19842582a55ec1aae02e00d0b12f64 (diff) | |
| parent | f1e8e4c766bd3d0092842f863adbda333f80d898 (diff) | |
Merge "Verify arguments passed are non-null." into main
3 files changed, 53 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/powerstats/PowerStatsService.java b/services/core/java/com/android/server/powerstats/PowerStatsService.java index 8f99d2836c63..1ca267e99c95 100644 --- a/services/core/java/com/android/server/powerstats/PowerStatsService.java +++ b/services/core/java/com/android/server/powerstats/PowerStatsService.java @@ -62,6 +62,7 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.Locale; +import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; @@ -207,19 +208,28 @@ public class PowerStatsService extends SystemService { private final IBinder mService = new IPowerStatsService.Stub() { @Override - public void getSupportedPowerMonitors(ResultReceiver resultReceiver) { + public void getSupportedPowerMonitors(@NonNull ResultReceiver resultReceiver) { + if (Flags.verifyNonNullArguments()) { + Objects.requireNonNull(resultReceiver); + } getHandler().post(() -> getSupportedPowerMonitorsImpl(resultReceiver)); } @Override - public void getPowerMonitorReadings(int[] powerMonitorIds, ResultReceiver resultReceiver) { + public void getPowerMonitorReadings(@NonNull int[] powerMonitorIds, + @NonNull ResultReceiver resultReceiver) { + if (Flags.verifyNonNullArguments()) { + Objects.requireNonNull(powerMonitorIds); + Objects.requireNonNull(resultReceiver); + } int callingUid = Binder.getCallingUid(); getHandler().post(() -> getPowerMonitorReadingsImpl(powerMonitorIds, resultReceiver, callingUid)); } @Override - protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + protected void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, + @Nullable String[] args) { if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return; if (mPowerStatsLogger == null) { @@ -263,6 +273,11 @@ public class PowerStatsService extends SystemService { } }; + @VisibleForTesting + IPowerStatsService getIPowerStatsServiceForTest() { + return (IPowerStatsService) mService; + } + private class DeviceConfigListener implements DeviceConfig.OnPropertiesChangedListener { public Executor mExecutor = new HandlerExecutor(getHandler()); diff --git a/services/core/java/com/android/server/powerstats/flags.aconfig b/services/core/java/com/android/server/powerstats/flags.aconfig index 0a4a7510aab8..29ad7dc2b18a 100644 --- a/services/core/java/com/android/server/powerstats/flags.aconfig +++ b/services/core/java/com/android/server/powerstats/flags.aconfig @@ -10,4 +10,15 @@ flag { metadata { purpose: PURPOSE_BUGFIX } +} + +flag { + name: "verify_non_null_arguments" + namespace: "backstage_power" + description: "Verify arguments passed are non-null" + bug: "356731520" + is_fixed_read_only: true + metadata { + purpose: PURPOSE_BUGFIX + } }
\ No newline at end of file diff --git a/services/tests/powerstatstests/src/com/android/server/powerstats/PowerStatsServiceTest.java b/services/tests/powerstatstests/src/com/android/server/powerstats/PowerStatsServiceTest.java index 1838fe884561..53e31438c560 100644 --- a/services/tests/powerstatstests/src/com/android/server/powerstats/PowerStatsServiceTest.java +++ b/services/tests/powerstatstests/src/com/android/server/powerstats/PowerStatsServiceTest.java @@ -19,6 +19,7 @@ package com.android.server.powerstats; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -37,6 +38,8 @@ import android.os.IPowerStatsService; import android.os.Looper; import android.os.PowerMonitor; import android.os.ResultReceiver; +import android.platform.test.annotations.EnableFlags; +import android.platform.test.flag.junit.SetFlagsRule; import android.provider.DeviceConfig; import android.provider.DeviceConfigInterface; @@ -58,6 +61,7 @@ import com.android.server.powerstats.nano.StateResidencyResultProto; import com.android.server.testutils.FakeDeviceConfigInterface; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import java.io.ByteArrayOutputStream; @@ -101,6 +105,8 @@ public class PowerStatsServiceTest { private static final int STATE_RESIDENCY_COUNT = 4; private static final int APP_UID = 10042; + @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); + private final Context mContext = InstrumentationRegistry.getInstrumentation().getContext(); private PowerStatsService mService; private TestPowerStatsHALWrapper mPowerStatsHALWrapper = new TestPowerStatsHALWrapper(); @@ -1198,4 +1204,22 @@ public class PowerStatsServiceTest { assertThat(Arrays.stream(supportedPowerMonitorsResult.powerMonitors) .map(PowerMonitor::getName).toList()).contains("ENERGYCONSUMER0"); } + + @EnableFlags(Flags.FLAG_VERIFY_NON_NULL_ARGUMENTS) + @Test + public void testGetSupportedPowerMonitors_withNullArguments() { + IPowerStatsService iPowerStatsService = mService.getIPowerStatsServiceForTest(); + assertThrows(NullPointerException.class, + () -> iPowerStatsService.getSupportedPowerMonitors(null)); + } + + @EnableFlags(Flags.FLAG_VERIFY_NON_NULL_ARGUMENTS) + @Test + public void testGetPowerMonitorReadings_withNullArguments() { + IPowerStatsService iPowerStatsService = mService.getIPowerStatsServiceForTest(); + assertThrows(NullPointerException.class, () -> iPowerStatsService.getPowerMonitorReadings( + null, new GetPowerMonitorsResult())); + assertThrows(NullPointerException.class, () -> iPowerStatsService.getPowerMonitorReadings( + new int[] {0}, null)); + } } |