Ignore CRLF strings in display SSIDs to avoid display errors

- Keep user-entered SSIDs in Wi-Fi Configuration

- Ignore CRLF strings in display SSIDs only

Bug: 224545390
Test: manual test
make RunSettingsRoboTests ROBOTEST_FILTER=AddAppNetworksFragmentTest

Change-Id: Ifc081f9c5c02b2d70412f296688b88e44e893add
diff --git a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragment.java b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragment.java
index 3f5ef48..62b477f 100644
--- a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragment.java
+++ b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragment.java
@@ -39,6 +39,7 @@
 import android.os.SystemClock;
 import android.provider.Settings;
 import android.text.TextUtils;
+import android.util.EventLog;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -518,7 +519,13 @@
 
         UiConfigurationItem(String displayedSsid, WifiNetworkSuggestion wifiNetworkSuggestion,
                 int index, int level) {
-            mDisplayedSsid = displayedSsid;
+            if (displayedSsid.contains("\n") || displayedSsid.contains("\r")) {
+                mDisplayedSsid = displayedSsid.replaceAll("\\r|\\n", "");
+                Log.e(TAG, "Ignore CRLF strings in display SSIDs to avoid display errors!");
+                EventLog.writeEvent(0x534e4554, "224545390", -1 /* UID */, "CRLF injection");
+            } else {
+                mDisplayedSsid = displayedSsid;
+            }
             mWifiNetworkSuggestion = wifiNetworkSuggestion;
             mIndex = index;
             mLevel = level;
diff --git a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java
index 24d4c47..8248789 100644
--- a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java
@@ -455,6 +455,36 @@
                 AddAppNetworksFragment.MESSAGE_SHOW_SAVE_FAILED)).isTrue();
     }
 
+    @Test
+    public void uiConfigurationItem_putCrToDisplayedSsid_shouldRemoveCr() {
+        String testSsid = "\r" + FAKE_NEW_WPA_SSID + "\r";
+
+        AddAppNetworksFragment.UiConfigurationItem item =
+                new AddAppNetworksFragment.UiConfigurationItem(testSsid, null, 0, 0);
+
+        assertThat(item.mDisplayedSsid).isEqualTo(FAKE_NEW_WPA_SSID);
+    }
+
+    @Test
+    public void uiConfigurationItem_putLfToDisplayedSsid_shouldRemoveLf() {
+        String testSsid = "\n" + FAKE_NEW_WPA_SSID + "\n";
+
+        AddAppNetworksFragment.UiConfigurationItem item =
+                new AddAppNetworksFragment.UiConfigurationItem(testSsid, null, 0, 0);
+
+        assertThat(item.mDisplayedSsid).isEqualTo(FAKE_NEW_WPA_SSID);
+    }
+
+    @Test
+    public void uiConfigurationItem_putCrLfToDisplayedSsid_shouldRemoveCrLf() {
+        String testSsid = "\r\n" + FAKE_NEW_WPA_SSID + "\r\n";
+
+        AddAppNetworksFragment.UiConfigurationItem item =
+                new AddAppNetworksFragment.UiConfigurationItem(testSsid, null, 0, 0);
+
+        assertThat(item.mDisplayedSsid).isEqualTo(FAKE_NEW_WPA_SSID);
+    }
+
     private void setUpOneScannedNetworkWithScanedLevel4() {
         final ArrayList list = new ArrayList<>();
         list.add(mWifiEntry);
OSZAR »