OSDN Git Service

Fix bootloop issue with UsageStatsService.
authorVarun Shah <varunshah@google.com>
Wed, 4 Sep 2019 19:04:02 +0000 (12:04 -0700)
committerVarun Shah <varunshah@google.com>
Mon, 9 Sep 2019 22:41:22 +0000 (22:41 +0000)
When the configurations are being read from the proto file, if a
duplicate locale is found in the list, an exception is thrown from
LocaleList which causes the UsageStatsService to crash. Instead, we'll
now log a WTF if duplicate locales are found when parsing the
configuration proto and not add the duplicate locale to the list.

Bug: 140197723
Test: atest UsageStatsDatabaseTest
Change-Id: Ie178b3cfdd45e6771a7c0e4bb42e47f79b5c30cc
(cherry picked from commit 5d9031dbee2fad9b29e6477f5d7af8b622f2b456)

core/java/android/content/res/Configuration.java

index 861ae7b..9cf54f4 100644 (file)
@@ -1222,7 +1222,15 @@ public final class Configuration implements Parcelable, Comparable<Configuration
                                                         .setVariant(variant)
                                                         .setScript(script)
                                                         .build();
-                                list.add(locale);
+                                // Log a WTF here if a repeated locale is found to avoid throwing an
+                                // exception in system server when LocaleList is created below
+                                final int inListIndex = list.indexOf(locale);
+                                if (inListIndex != -1) {
+                                    Slog.wtf(TAG, "Repeated locale (" + list.get(inListIndex) + ")"
+                                            + " found when trying to add: " + locale.toString());
+                                } else {
+                                    list.add(locale);
+                                }
                             } catch (IllformedLocaleException e) {
                                 Slog.e(TAG, "readFromProto error building locale with: "
                                         + "language-" + language + ";country-" + country