diff options
| author | 2023-03-06 15:39:02 +0100 | |
|---|---|---|
| committer | 2023-03-06 15:50:13 +0100 | |
| commit | 1ce5ddfc1c1a6ed76f152cb7eca0699f72230e3a (patch) | |
| tree | 28707cfb249943a06f688b7be12ceceebd2fd023 | |
| parent | 1621d474eb9735595c9739739705679ea8f21006 (diff) | |
Disallow creation of virtual sensors with non-positive type.
Bug: 269732344
Test: atest VirtualSensorConfigTest
Change-Id: I7f4a37ae002b3e790dbcd2b5179d111d3a1bd997
4 files changed, 28 insertions, 2 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 8a6faa109522..aefa93a0a875 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -3362,7 +3362,7 @@ package android.companion.virtual.sensor { } public static final class VirtualSensorConfig.Builder { - ctor public VirtualSensorConfig.Builder(int, @NonNull String); + ctor public VirtualSensorConfig.Builder(@IntRange(from=1) int, @NonNull String); method @NonNull public android.companion.virtual.sensor.VirtualSensorConfig build(); method @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setDirectChannelTypesSupported(int); method @NonNull public android.companion.virtual.sensor.VirtualSensorConfig.Builder setHighestDirectReportRateLevel(int); diff --git a/core/java/android/companion/virtual/sensor/VirtualSensorConfig.java b/core/java/android/companion/virtual/sensor/VirtualSensorConfig.java index ffbdff8c2e3b..401e754abca6 100644 --- a/core/java/android/companion/virtual/sensor/VirtualSensorConfig.java +++ b/core/java/android/companion/virtual/sensor/VirtualSensorConfig.java @@ -17,6 +17,7 @@ package android.companion.virtual.sensor; +import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; @@ -167,7 +168,10 @@ public final class VirtualSensorConfig implements Parcelable { * @param name The name of the sensor. Must be unique among all sensors with the same type * that belong to the same virtual device. */ - public Builder(int type, @NonNull String name) { + public Builder(@IntRange(from = 1) int type, @NonNull String name) { + if (type <= 0) { + throw new IllegalArgumentException("Virtual sensor type must be positive"); + } mType = type; mName = Objects.requireNonNull(name); } diff --git a/core/tests/coretests/src/android/companion/virtual/sensor/VirtualSensorConfigTest.java b/core/tests/coretests/src/android/companion/virtual/sensor/VirtualSensorConfigTest.java index 16ed3ef42da3..17b064c12598 100644 --- a/core/tests/coretests/src/android/companion/virtual/sensor/VirtualSensorConfigTest.java +++ b/core/tests/coretests/src/android/companion/virtual/sensor/VirtualSensorConfigTest.java @@ -26,6 +26,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.testng.Assert.assertThrows; +import android.hardware.Sensor; import android.os.Parcel; import android.platform.test.annotations.Presubmit; @@ -67,6 +68,24 @@ public class VirtualSensorConfigTest { } @Test + public void virtualSensorConfig_invalidName_throwsException() { + assertThrows( + NullPointerException.class, + () -> new VirtualSensorConfig.Builder(TYPE_ACCELEROMETER, null)); + } + + @Test + public void virtualSensorConfig_invalidType_throwsException() { + assertThrows( + IllegalArgumentException.class, + () -> new VirtualSensorConfig.Builder(Sensor.TYPE_ALL, SENSOR_NAME)); + + assertThrows( + IllegalArgumentException.class, + () -> new VirtualSensorConfig.Builder(0, SENSOR_NAME)); + } + + @Test public void hardwareBufferDirectChannelTypeSupported_throwsException() { assertThrows( IllegalArgumentException.class, diff --git a/services/companion/java/com/android/server/companion/virtual/SensorController.java b/services/companion/java/com/android/server/companion/virtual/SensorController.java index 864fe0f5edc1..7df0d861dc22 100644 --- a/services/companion/java/com/android/server/companion/virtual/SensorController.java +++ b/services/companion/java/com/android/server/companion/virtual/SensorController.java @@ -99,6 +99,9 @@ public class SensorController { private int createSensorInternal(IBinder sensorToken, VirtualSensorConfig config) throws SensorCreationException { + if (config.getType() <= 0) { + throw new SensorCreationException("Received an invalid virtual sensor type."); + } final int handle = mSensorManagerInternal.createRuntimeSensor(mVirtualDeviceId, config.getType(), config.getName(), config.getVendor() == null ? "" : config.getVendor(), config.getFlags(), |