From 9e41abcb36c585dd1cd9622f0eeeaddb0faae111 Mon Sep 17 00:00:00 2001 From: Sebastian Nagel Date: Fri, 9 Dec 2016 15:35:10 +0100 Subject: [PATCH] Strip empty port, do not fail --- src/main/java/org/archive/url/URLParser.java | 24 +++++++++++-------- .../archive/url/IAURLCanonicalizerTest.java | 1 + .../archive/url/WaybackURLKeyMakerTest.java | 1 + 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/archive/url/URLParser.java b/src/main/java/org/archive/url/URLParser.java index 98e4c1aa..83d3c386 100644 --- a/src/main/java/org/archive/url/URLParser.java +++ b/src/main/java/org/archive/url/URLParser.java @@ -246,16 +246,20 @@ public static HandyURL parse(String urlString) throws URISyntaxException { colonPort = uriAuthority.substring(portColonIndex); } if(colonPort != null) { - if(colonPort.startsWith(":")) { - try { - port = Integer.parseInt(colonPort.substring(1)); - } catch(NumberFormatException e) { - throw new URISyntaxException(urlString, "bad port " - + colonPort.substring(1)); - } - } else { - // XXX: what's happened?! - } + if(colonPort.startsWith(":")) { + if (colonPort.length() == 1) { + // a bare colon (http://example.com:/), use default port + } else { + try { + port = Integer.parseInt(colonPort.substring(1)); + } catch(NumberFormatException e) { + throw new URISyntaxException(urlString, "bad port " + + colonPort.substring(1)); + } + } + } else { + // XXX: what's happened?! + } } if(userInfo != null) { int passColonIndex = userInfo.indexOf(COLON); diff --git a/src/test/java/org/archive/url/IAURLCanonicalizerTest.java b/src/test/java/org/archive/url/IAURLCanonicalizerTest.java index 91751b4a..e2c46258 100644 --- a/src/test/java/org/archive/url/IAURLCanonicalizerTest.java +++ b/src/test/java/org/archive/url/IAURLCanonicalizerTest.java @@ -12,6 +12,7 @@ public void testFull() throws URISyntaxException { compCan(iaC,"https://www.archive.org:80/","https://archive.org:80/"); compCan(iaC,"http://www.archive.org:443/","http://archive.org:443/"); compCan(iaC,"https://www.archive.org:443/","https://archive.org/"); + compCan(iaC,"http://www.archive.org:/","http://archive.org/"); compCan(iaC,"http://www.archive.org/big/","http://archive.org/big"); compCan(iaC,"dns:www.archive.org","dns:www.archive.org"); diff --git a/src/test/java/org/archive/url/WaybackURLKeyMakerTest.java b/src/test/java/org/archive/url/WaybackURLKeyMakerTest.java index 34bfe625..26161456 100644 --- a/src/test/java/org/archive/url/WaybackURLKeyMakerTest.java +++ b/src/test/java/org/archive/url/WaybackURLKeyMakerTest.java @@ -22,6 +22,7 @@ public void testMakeKey() throws URISyntaxException { assertEquals("org,archive)/goo", km.makeKey("http://archive.org/goo/?")); assertEquals("org,archive)/goo?a&b", km.makeKey("http://archive.org/goo/?b&a")); assertEquals("org,archive)/goo?a=1&a=2&b", km.makeKey("http://archive.org/goo/?a=2&b&a=1")); + assertEquals("org,archive)/", km.makeKey("http://archive.org:/")); } }