diff options
| author | Robert Greig <rgreig@apache.org> | 2007-04-20 12:50:54 +0000 |
|---|---|---|
| committer | Robert Greig <rgreig@apache.org> | 2007-04-20 12:50:54 +0000 |
| commit | e835c67d8a1c40c1068a7bac89fcd0a45eb738bb (patch) | |
| tree | 204413f07fa5d8e73b788b9961389a9f2e9039de /java | |
| parent | 6cfd8a3db4ff30fe28d7f4909e7f1ff236ef1b8a (diff) | |
| download | qpid-python-e835c67d8a1c40c1068a7bac89fcd0a45eb738bb.tar.gz | |
Copied fix for invalid IP bytes greater than 127 from trunk.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/M2@530777 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
| -rw-r--r-- | java/broker/src/main/java/org/apache/qpid/server/Main.java | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/server/Main.java b/java/broker/src/main/java/org/apache/qpid/server/Main.java index d5c532c656..14aa919356 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/Main.java +++ b/java/broker/src/main/java/org/apache/qpid/server/Main.java @@ -71,6 +71,9 @@ public class Main private static final String DEFAULT_LOG_CONFIG_FILENAME = "log4j.xml"; public static final String QPID_HOME = "QPID_HOME"; + private static final int IPV4_ADDRESS_LENGTH = 4; + + private static final char IPV4_LITERAL_SEPARATOR = '.'; protected static class InitException extends Exception { @@ -395,28 +398,30 @@ public class Main private byte[] parseIP(String address) throws Exception { - StringTokenizer tokenizer = new StringTokenizer(address, "."); - byte[] ip = new byte[4]; - int index = 0; - while (tokenizer.hasMoreTokens()) + char[] literalBuffer = address.toCharArray(); + int byteCount = 0; + int currByte = 0; + byte[] ip = new byte[IPV4_ADDRESS_LENGTH]; + for (int i = 0 ; i < literalBuffer.length ; i++) { - String token = tokenizer.nextToken(); - try + char currChar = literalBuffer[i]; + if ((currChar >= '0') && (currChar <= '9')) { - ip[index++] = Byte.parseByte(token); - } - catch (NumberFormatException e) + currByte = (currByte * 10) + (Character.digit(currChar, 10) & 0xFF); + } + + if (currChar == IPV4_LITERAL_SEPARATOR || (i + 1 == literalBuffer.length)) { - throw new Exception("Error parsing IP address: " + address, e); - } + ip[byteCount++] = (byte)currByte; + currByte = 0; + } } - if (index != 4) + if (byteCount != 4) { throw new Exception("Invalid IP address: " + address); - } - - return ip; + } + return ip; } private void configureLogging(File logConfigFile, String logWatchConfig) |
