From e5f9b2bbc9f9c5f34d6ad9d290bfb63e48b79587 Mon Sep 17 00:00:00 2001 From: Roshan Pius Date: Tue, 15 Aug 2017 14:41:16 -0700 Subject: NativeUtil: Use UTF-8 decoder Most of the string/hex fields that is exposed in WifiConfiguration wrongly state that the field neeeds to be a quoted ASCII string or hex. It turns out that the fields could be any UTF-8 encoded string. Bug: 64586263 Test: Unit tests Change-Id: I3c761d10018ccb944c0623935cfa6b60cedcbfd8 --- .../android/server/wifi/SupplicantStaNetworkHal.java | 4 ++-- .../com/android/server/wifi/WifiConfigurationUtil.java | 2 +- .../java/com/android/server/wifi/util/NativeUtil.java | 18 +++++++++--------- 3 files changed, 12 insertions(+), 12 deletions(-) (limited to 'service') diff --git a/service/java/com/android/server/wifi/SupplicantStaNetworkHal.java b/service/java/com/android/server/wifi/SupplicantStaNetworkHal.java index 61ec9b3ab..b35989797 100644 --- a/service/java/com/android/server/wifi/SupplicantStaNetworkHal.java +++ b/service/java/com/android/server/wifi/SupplicantStaNetworkHal.java @@ -199,7 +199,7 @@ public class SupplicantStaNetworkHal { for (int i = 0; i < 4; i++) { config.wepKeys[i] = null; if (getWepKey(i) && !ArrayUtils.isEmpty(mWepKey)) { - config.wepKeys[i] = NativeUtil.bytesToHexOrQuotedAsciiString(mWepKey); + config.wepKeys[i] = NativeUtil.bytesToHexOrQuotedString(mWepKey); } } /** PSK pass phrase */ @@ -293,7 +293,7 @@ public class SupplicantStaNetworkHal { for (int i = 0; i < config.wepKeys.length; i++) { if (config.wepKeys[i] != null) { if (!setWepKey( - i, NativeUtil.hexOrQuotedAsciiStringToBytes(config.wepKeys[i]))) { + i, NativeUtil.hexOrQuotedStringToBytes(config.wepKeys[i]))) { Log.e(TAG, "failed to set wep_key " + i); return false; } diff --git a/service/java/com/android/server/wifi/WifiConfigurationUtil.java b/service/java/com/android/server/wifi/WifiConfigurationUtil.java index fef78aade..dadc8a4e8 100644 --- a/service/java/com/android/server/wifi/WifiConfigurationUtil.java +++ b/service/java/com/android/server/wifi/WifiConfigurationUtil.java @@ -345,7 +345,7 @@ public class WifiConfigurationUtil { } } try { - NativeUtil.hexOrQuotedAsciiStringToBytes(psk); + NativeUtil.hexOrQuotedStringToBytes(psk); } catch (IllegalArgumentException e) { Log.e(TAG, "validatePsk failed: malformed string: " + psk); return false; diff --git a/service/java/com/android/server/wifi/util/NativeUtil.java b/service/java/com/android/server/wifi/util/NativeUtil.java index 95ee11eb8..84f93514c 100644 --- a/service/java/com/android/server/wifi/util/NativeUtil.java +++ b/service/java/com/android/server/wifi/util/NativeUtil.java @@ -210,13 +210,13 @@ public class NativeUtil { /** * Converts an string to an arraylist of UTF_8 byte values. * These forms are acceptable: - * a) ASCII String encapsulated in quotes, or + * a) UTF-8 String encapsulated in quotes, or * b) Hex string with no delimiters. * * @param str String to be converted. * @throws IllegalArgumentException for null string. */ - public static ArrayList hexOrQuotedAsciiStringToBytes(String str) { + public static ArrayList hexOrQuotedStringToBytes(String str) { if (str == null) { throw new IllegalArgumentException("null string"); } @@ -232,21 +232,21 @@ public class NativeUtil { /** * Converts an ArrayList of UTF_8 byte values to string. * The string will either be: - * a) ASCII String encapsulated in quotes (if all the bytes are ASCII encodeable and non null), + * a) UTF-8 String encapsulated in quotes (if all the bytes are UTF-8 encodeable and non null), * or * b) Hex string with no delimiters. * * @param bytes List of bytes for ssid. * @throws IllegalArgumentException for null bytes. */ - public static String bytesToHexOrQuotedAsciiString(ArrayList bytes) { + public static String bytesToHexOrQuotedString(ArrayList bytes) { if (bytes == null) { throw new IllegalArgumentException("null ssid bytes"); } byte[] byteArray = byteArrayFromArrayList(bytes); // Check for 0's in the byte stream in which case we cannot convert this into a string. if (!bytes.contains(Byte.valueOf((byte) 0))) { - CharsetDecoder decoder = StandardCharsets.US_ASCII.newDecoder(); + CharsetDecoder decoder = StandardCharsets.UTF_8.newDecoder(); try { CharBuffer decoded = decoder.decode(ByteBuffer.wrap(byteArray)); return "\"" + decoded.toString() + "\""; @@ -259,20 +259,20 @@ public class NativeUtil { /** * Converts an ssid string to an arraylist of UTF_8 byte values. * These forms are acceptable: - * a) ASCII String encapsulated in quotes, or + * a) UTF-8 String encapsulated in quotes, or * b) Hex string with no delimiters. * * @param ssidStr String to be converted. * @throws IllegalArgumentException for null string. */ public static ArrayList decodeSsid(String ssidStr) { - return hexOrQuotedAsciiStringToBytes(ssidStr); + return hexOrQuotedStringToBytes(ssidStr); } /** * Converts an ArrayList of UTF_8 byte values to ssid string. * The string will either be: - * a) ASCII String encapsulated in quotes (if all the bytes are ASCII encodeable and non null), + * a) UTF-8 String encapsulated in quotes (if all the bytes are UTF-8 encodeable and non null), * or * b) Hex string with no delimiters. * @@ -280,7 +280,7 @@ public class NativeUtil { * @throws IllegalArgumentException for null bytes. */ public static String encodeSsid(ArrayList ssidBytes) { - return bytesToHexOrQuotedAsciiString(ssidBytes); + return bytesToHexOrQuotedString(ssidBytes); } /** -- cgit v1.2.3