Skip to content

Commit

Permalink
HPCC4J-605 Connection: Improve Invalid URL Error Message
Browse files Browse the repository at this point in the history
- Added explicit check for underscores in hostname

Signed-off-by: James McMullan [email protected]
  • Loading branch information
jpmcmu committed Jun 4, 2024
1 parent 58e2f45 commit b16011e
Showing 1 changed file with 26 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import java.util.Base64;
import java.util.Base64.Decoder;
import java.util.Base64.Encoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
Expand Down Expand Up @@ -205,6 +207,9 @@ public int hashCode()
private StringBuffer baseUrl;
private StringBuffer uriAndParams;

// Note: this pattern is very basic and is only meant to extract hostnames from URLs
private final static Pattern URL_HOSTNAME_PATTERN = Pattern.compile("((https?|ftp|file):\\/\\/)?(?<hostname>([\\da-z\\.-_]+)\\.([a-z\\.]{2,6}))(:\\d{2,6})?.*");

/** Constant <code>CONNECT_TIMEOUT_PARAM="connecttimeoutmillis"</code> */
final static public String CONNECT_TIMEOUT_PARAM = "connecttimeoutmillis";
/** Constant <code>READ_TIMEOUT_PARAM="readtimeoutmillis"</code> */
Expand Down Expand Up @@ -287,7 +292,27 @@ public static boolean isSslProtocol(String protocol)
*/
public Connection(String connectionstring) throws MalformedURLException
{
URL theurl = new URL(connectionstring);
URL theurl = null;
try
{
theurl = new URL(connectionstring);
}
catch (MalformedURLException e)
{
Matcher matcher = URL_HOSTNAME_PATTERN.matcher(connectionstring);
if (matcher.matches())
{
String hostName = matcher.group("hostname");
if (hostName.contains("_"))
{
throw new MalformedURLException("Invalid URL: Hostname contains invalid underscores: '" + connectionstring + "': " + e.getMessage());
}
}
else
{
throw e;
}
}

setProtocol(theurl.getProtocol());

Expand Down

0 comments on commit b16011e

Please sign in to comment.