diff options
| author | Julian Veit <claymore1298@gmail.com> | 2025-06-11 19:06:51 +0200 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@box1> | 2025-06-11 19:06:51 +0200 |
| commit | e1424cddcc730de4555027b1eaf6a37fb93187c4 (patch) | |
| tree | 5b7d96dfb6ed8303730943e956037cf2da706cde /telecomm/java/android/telecom/StatusHints.java | |
| parent | 6ac7aa3f485243879ad4326c9cc8bb3ff07cc990 (diff) | |
| parent | 95704d5a2d4a3ee11cdca23151ef5f1fe3b0155f (diff) | |
Merge changes from topic "S_asb_2025-03" into s12.1s12.1
* changes:
RESTRICT AUTOMERGE [PM] Fix the profile issue in UninstallerActivity
Check account type returned by AbstractAccountAuthenticator.
Resolve cross account user icon validation.
For the wallet card & icon, only allow the drawable be loaded from bitmap.
Diffstat (limited to 'telecomm/java/android/telecom/StatusHints.java')
| -rw-r--r-- | telecomm/java/android/telecom/StatusHints.java | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/telecomm/java/android/telecom/StatusHints.java b/telecomm/java/android/telecom/StatusHints.java index b7346331dc60..907a4b2a7000 100644 --- a/telecomm/java/android/telecom/StatusHints.java +++ b/telecomm/java/android/telecom/StatusHints.java @@ -27,6 +27,7 @@ import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.os.UserHandle; +import android.util.Log; import com.android.internal.annotations.VisibleForTesting; @@ -40,6 +41,7 @@ public final class StatusHints implements Parcelable { private final CharSequence mLabel; private Icon mIcon; private final Bundle mExtras; + private static final String TAG = StatusHints.class.getSimpleName(); /** * @hide @@ -150,17 +152,37 @@ public final class StatusHints implements Parcelable { // incompatible types. if (icon != null && (icon.getType() == Icon.TYPE_URI || icon.getType() == Icon.TYPE_URI_ADAPTIVE_BITMAP)) { - String encodedUser = icon.getUri().getEncodedUserInfo(); - // If there is no encoded user, the URI is calling into the calling user space - if (encodedUser != null) { - int userId = Integer.parseInt(encodedUser); - // Do not try to save the icon if the user id isn't in the calling user space. - if (userId != callingUserHandle.getIdentifier()) return null; + int callingUserId = callingUserHandle.getIdentifier(); + int requestingUserId = getUserIdFromAuthority( + icon.getUri().getAuthority(), callingUserId); + if (callingUserId != requestingUserId) { + return null; } + } return icon; } + /** + * Derives the user id from the authority or the default user id if none could be found. + * @param auth + * @param defaultUserId + * @return The user id from the given authority. + * @hide + */ + public static int getUserIdFromAuthority(String auth, int defaultUserId) { + if (auth == null) return defaultUserId; + int end = auth.lastIndexOf('@'); + if (end == -1) return defaultUserId; + String userIdString = auth.substring(0, end); + try { + return Integer.parseInt(userIdString); + } catch (NumberFormatException e) { + Log.w(TAG, "Error parsing userId." + e); + return UserHandle.USER_NULL; + } + } + @Override public void writeToParcel(Parcel out, int flags) { out.writeCharSequence(mLabel); |
