diff --git a/android/app/src/com/android/bluetooth/Utils.java b/android/app/src/com/android/bluetooth/Utils.java index 2f0fb5f088bf235b7c52164efa0a2e17e98401ac..fd7a15ab3bbe3d2fb66af3a49d05418650d6214c 100644 --- a/android/app/src/com/android/bluetooth/Utils.java +++ b/android/app/src/com/android/bluetooth/Utils.java @@ -534,10 +534,10 @@ public final class Utils { } // STOPSHIP(b/188391719): enable this security enforcement // attributionSource.enforceCallingUid(); - AttributionSource currentAttribution = new AttributionSource - .Builder(context.getAttributionSource()) - .setNext(attributionSource) - .build(); + AttributionSource currentAttribution = + new AttributionSource.Builder(context.getAttributionSource()) + .setNext(Objects.requireNonNull(attributionSource)) + .build(); PermissionManager pm = context.getSystemService(PermissionManager.class); if (pm == null) { return false; @@ -809,10 +809,10 @@ public final class Utils { Log.e(TAG, "Permission denial: Location is off."); return false; } - AttributionSource currentAttribution = new AttributionSource - .Builder(context.getAttributionSource()) - .setNext(attributionSource) - .build(); + AttributionSource currentAttribution = + new AttributionSource.Builder(context.getAttributionSource()) + .setNext(Objects.requireNonNull(attributionSource)) + .build(); // STOPSHIP(b/188391719): enable this security enforcement // attributionSource.enforceCallingUid(); PermissionManager pm = context.getSystemService(PermissionManager.class); @@ -843,10 +843,10 @@ public final class Utils { return false; } - final AttributionSource currentAttribution = new AttributionSource - .Builder(context.getAttributionSource()) - .setNext(attributionSource) - .build(); + final AttributionSource currentAttribution = + new AttributionSource.Builder(context.getAttributionSource()) + .setNext(Objects.requireNonNull(attributionSource)) + .build(); // STOPSHIP(b/188391719): enable this security enforcement // attributionSource.enforceCallingUid(); PermissionManager pm = context.getSystemService(PermissionManager.class); @@ -881,10 +881,10 @@ public final class Utils { return false; } - AttributionSource currentAttribution = new AttributionSource - .Builder(context.getAttributionSource()) - .setNext(attributionSource) - .build(); + AttributionSource currentAttribution = + new AttributionSource.Builder(context.getAttributionSource()) + .setNext(Objects.requireNonNull(attributionSource)) + .build(); // STOPSHIP(b/188391719): enable this security enforcement // attributionSource.enforceCallingUid(); PermissionManager pm = context.getSystemService(PermissionManager.class); diff --git a/android/app/tests/unit/src/com/android/bluetooth/UtilsTest.java b/android/app/tests/unit/src/com/android/bluetooth/UtilsTest.java index 20e830c7baad292c6d75202261b7b7257c65c8dd..0a2fef36491275b0bbdc411f2e72a56c4b40094f 100644 --- a/android/app/tests/unit/src/com/android/bluetooth/UtilsTest.java +++ b/android/app/tests/unit/src/com/android/bluetooth/UtilsTest.java @@ -119,10 +119,12 @@ public class UtilsTest { boolean enabledStatus = locationManager.isLocationEnabledForUser(userHandle); locationManager.setLocationEnabledForUser(false, userHandle); - assertThat(Utils.checkCallerHasCoarseLocation(context, null, userHandle)).isFalse(); + assertThat(Utils.checkCallerHasCoarseLocation( + context, context.getAttributionSource(), userHandle)) + .isFalse(); locationManager.setLocationEnabledForUser(true, userHandle); - Utils.checkCallerHasCoarseLocation(context, null, userHandle); + Utils.checkCallerHasCoarseLocation(context, context.getAttributionSource(), userHandle); if (!enabledStatus) { locationManager.setLocationEnabledForUser(false, userHandle); } @@ -136,10 +138,13 @@ public class UtilsTest { boolean enabledStatus = locationManager.isLocationEnabledForUser(userHandle); locationManager.setLocationEnabledForUser(false, userHandle); - assertThat(Utils.checkCallerHasCoarseOrFineLocation(context, null, userHandle)).isFalse(); + assertThat(Utils.checkCallerHasCoarseOrFineLocation( + context, context.getAttributionSource(), userHandle)) + .isFalse(); locationManager.setLocationEnabledForUser(true, userHandle); - Utils.checkCallerHasCoarseOrFineLocation(context, null, userHandle); + Utils.checkCallerHasCoarseOrFineLocation( + context, context.getAttributionSource(), userHandle); if (!enabledStatus) { locationManager.setLocationEnabledForUser(false, userHandle); } diff --git a/system/stack/sdp/sdp_utils.cc b/system/stack/sdp/sdp_utils.cc index 0523aa07a7185e3ef577b1cfcb06d0e23d24c4b2..b3dbe6c79a8ef9caf68e3d7cd357fe22bfa7f8da 100644 --- a/system/stack/sdp/sdp_utils.cc +++ b/system/stack/sdp/sdp_utils.cc @@ -1122,8 +1122,28 @@ bool sdpu_compare_uuid_arrays(const uint8_t* p_uuid1, uint32_t len1, ******************************************************************************/ bool sdpu_compare_uuid_with_attr(const Uuid& uuid, tSDP_DISC_ATTR* p_attr) { int len = uuid.GetShortestRepresentationSize(); - if (len == 2) return uuid.As16Bit() == p_attr->attr_value.v.u16; - if (len == 4) return uuid.As32Bit() == p_attr->attr_value.v.u32; + if (len == 2) { + if (SDP_DISC_ATTR_LEN(p_attr->attr_len_type) == Uuid::kNumBytes16) { + return uuid.As16Bit() == p_attr->attr_value.v.u16; + } else { + LOG(ERROR) << "invalid length for discovery attribute"; + return (false); + } + } + if (len == 4) { + if (SDP_DISC_ATTR_LEN(p_attr->attr_len_type) == Uuid::kNumBytes32) { + return uuid.As32Bit() == p_attr->attr_value.v.u32; + } else { + LOG(ERROR) << "invalid length for discovery attribute"; + return (false); + } + } + + if (SDP_DISC_ATTR_LEN(p_attr->attr_len_type) != Uuid::kNumBytes128) { + LOG(ERROR) << "invalid length for discovery attribute"; + return (false); + } + if (memcmp(uuid.To128BitBE().data(), (void*)p_attr->attr_value.v.array, Uuid::kNumBytes128) == 0) return (true);