IPv6 addresses not accepted by Drizzle-JDBC #10

Closed
misambart opened this Issue Oct 24, 2012 · 0 comments

Projects

None yet

1 participant

Contributor

Hi,

I have recently started testing Drizzle-JDBC using IPv6 addresses and this results in an exception in the parse(String url) method of org.drizzle.jdbc.JDBCUrl. This is caused by the fact that IPv6 addresses contain ":" characters.

I have prepared and tested a fix for this issue. As I do not have GIT configured on my machine and the change is relatively small, it seemed simpler to post the suggested code change directly here.

The code change allows IPv6 addresses when placed between square brackets (this matches general URL formatting standards for IPv6 addresses):
jdbc:drizzle://[IPv6Address]:3306/database_name

For example, with the IPv6 localhost address, this would look like this:
jdbc:drizzle://[::1]:3306/database_name

Here is the source code related to the issue before and after the suggested change:

Old code:
int hostPortDividerIndex = url.indexOf(":");
if (hostPortDividerIndex == -1) {
int slashIndex = url.indexOf("/");
hostname = url.substring(0, slashIndex);
url = url.substring(slashIndex+1);
} else {
hostname = url.substring(0, hostPortDividerIndex);
url = url.substring(hostPortDividerIndex+1);
int slashIndex = url.indexOf("/");
port = Integer.parseInt(url.substring(0, slashIndex));
url = url.substring(slashIndex+1);
}
int slashIndex = url.indexOf("/");
if (slashIndex == -1) {
database = url;
} else {
database = url.substring(0, slashIndex);
}

New code:
int slashIndex = url.indexOf("/");
String hostPortCombo = url.substring(0, slashIndex);
url = url.substring(slashIndex + 1);
int ipv6StartIndex = hostPortCombo.indexOf("[");
int ipv6EndIndex = hostPortCombo.indexOf("]");
if (ipv6StartIndex >= 0 && ipv6EndIndex > ipv6StartIndex) {
hostname = hostPortCombo.substring(ipv6StartIndex + 1, ipv6EndIndex);
int hostPortDividerIndex = hostPortCombo.indexOf(":", ipv6EndIndex + 1);
if (hostPortDividerIndex != -1) {
port = Integer.parseInt(hostPortCombo.substring(hostPortDividerIndex + 1));
}
} else {
int hostPortDividerIndex = hostPortCombo.indexOf(":");
if (hostPortDividerIndex == -1) {
hostname = hostPortCombo;
} else {
hostname = hostPortCombo.substring(0, hostPortDividerIndex);
port = Integer.parseInt(hostPortCombo.substring(hostPortDividerIndex + 1));
}
}
slashIndex = url.indexOf("/");
if (slashIndex == -1) {
database = url;
} else {
database = url.substring(0, slashIndex);
}

@misambart misambart closed this Nov 1, 2012
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment