diff options
author | Robert Greenwalt <rgreenwalt@google.com> | 2011-12-07 09:58:48 -0800 |
---|---|---|
committer | Robert Greenwalt <rgreenwalt@google.com> | 2011-12-07 09:58:48 -0800 |
commit | d4420ab2fbb85280d2f507072fe0bd820ac26a3f (patch) | |
tree | 966cb38b7d3d7c75576eba40e3f2912cfd6f8c0d | |
parent | 74b496dd8aab7e29bcba0c6502f773555c4ce29f (diff) | |
download | frameworks_base-d4420ab2fbb85280d2f507072fe0bd820ac26a3f.zip frameworks_base-d4420ab2fbb85280d2f507072fe0bd820ac26a3f.tar.gz frameworks_base-d4420ab2fbb85280d2f507072fe0bd820ac26a3f.tar.bz2 |
Trim leading zeros from ipv4 addrs.
Underlying libraries will interpret leading zeros as octal values and
fail.
bug:5262995
Change-Id: Iff949225bb6b941f7274ee81754e1f41ed719a6c
-rw-r--r-- | core/java/android/net/NetworkUtils.java | 27 | ||||
-rw-r--r-- | telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java | 12 |
2 files changed, 36 insertions, 3 deletions
diff --git a/core/java/android/net/NetworkUtils.java b/core/java/android/net/NetworkUtils.java index e289fc1..72ea02e 100644 --- a/core/java/android/net/NetworkUtils.java +++ b/core/java/android/net/NetworkUtils.java @@ -250,4 +250,31 @@ public class NetworkUtils { } return result; } + + /** + * Trim leading zeros from IPv4 address strings + * Our base libraries will interpret that as octel.. + * Must leave non v4 addresses and host names alone. + * For example, 192.168.000.010 -> 192.168.0.10 + * TODO - fix base libraries and remove this function + * @param addr a string representing an ip addr + * @return a string propertly trimmed + */ + public static String trimV4AddrZeros(String addr) { + String[] octets = addr.split("\\."); + if (octets.length != 4) return addr; + StringBuilder builder = new StringBuilder(16); + String result = null; + for (int i = 0; i < 4; i++) { + try { + if (octets[i].length > 3) return addr; + builder.append(Integer.parseInt(octets[i])); + } catch (NumberFormatException e) { + return addr; + } + if (i < 3) builder.append('.'); + } + result = builder.toString(); + return result; + } } diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java index 11f1623..963db2c 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java @@ -914,10 +914,16 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.NUMERIC)), cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.NAME)), cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.APN)), - cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.PROXY)), + NetworkUtils.trimV4AddrZeros( + cursor.getString( + cursor.getColumnIndexOrThrow(Telephony.Carriers.PROXY))), cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.PORT)), - cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.MMSC)), - cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.MMSPROXY)), + NetworkUtils.trimV4AddrZeros( + cursor.getString( + cursor.getColumnIndexOrThrow(Telephony.Carriers.MMSC))), + NetworkUtils.trimV4AddrZeros( + cursor.getString( + cursor.getColumnIndexOrThrow(Telephony.Carriers.MMSPROXY))), cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.MMSPORT)), cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.USER)), cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.PASSWORD)), |