Don't prevent notification updates in DOS protection.

The NotificationManagerService limits the number of
notifications per package+user to 50. Once that limit is
reached, it will refuse new notifications. However, it was
also erroneously refusing updates to existing notifications.

Bug: 5821364

(cherry picked from commit d9f4c95b7d)

Change-Id: I9abc455ef3863730f8e42c8eecff4892cdbc7c1c
This commit is contained in:
Vladimir Marko
2013-09-11 11:13:55 +01:00
parent 4600dd053d
commit 2526f33df0

View File

@@ -1968,6 +1968,9 @@ public class NotificationManagerService extends SystemService {
for (int i=0; i<N; i++) {
final NotificationRecord r = mNotificationList.get(i);
if (r.sbn.getPackageName().equals(pkg) && r.sbn.getUserId() == userId) {
if (r.sbn.getId() == id && TextUtils.equals(r.sbn.getTag(), tag)) {
break; // Allow updating existing notification
}
count++;
if (count >= MAX_PACKAGE_NOTIFICATIONS) {
Slog.e(TAG, "Package has already posted " + count
@@ -3003,19 +3006,8 @@ public class NotificationManagerService extends SystemService {
final int len = list.size();
for (int i=0; i<len; i++) {
NotificationRecord r = list.get(i);
if (!notificationMatchesUserId(r, userId) || r.sbn.getId() != id) {
continue;
}
if (tag == null) {
if (r.sbn.getTag() != null) {
continue;
}
} else {
if (!tag.equals(r.sbn.getTag())) {
continue;
}
}
if (r.sbn.getPackageName().equals(pkg)) {
if (notificationMatchesUserId(r, userId) && r.sbn.getId() == id &&
TextUtils.equals(r.sbn.getTag(), tag) && r.sbn.getPackageName().equals(pkg)) {
return i;
}
}