diff --git a/commafeed-server/src/main/java/com/commafeed/backend/Urls.java b/commafeed-server/src/main/java/com/commafeed/backend/Urls.java index 3ad98921..bdf36e1d 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/Urls.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/Urls.java @@ -8,8 +8,10 @@ import org.netpreserve.urlcanon.Canonicalizer; import org.netpreserve.urlcanon.ParsedUrl; import lombok.experimental.UtilityClass; +import lombok.extern.slf4j.Slf4j; @UtilityClass +@Slf4j public class Urls { private static final String ESCAPED_QUESTION_MARK = Pattern.quote("?"); @@ -42,7 +44,12 @@ public class Urls { return null; } - return URI.create(baseUrl).resolve(relativeUrl).toString(); + try { + return URI.create(baseUrl).resolve(relativeUrl).toString(); + } catch (IllegalArgumentException e) { + log.debug("Unable to create absolute url from relative url: {} base: {}", relativeUrl, baseUrl, e); + return null; + } } public static String removeTrailingSlash(String url) { diff --git a/commafeed-server/src/test/java/com/commafeed/backend/UrlsTest.java b/commafeed-server/src/test/java/com/commafeed/backend/UrlsTest.java index 04e26ba8..6b0cacfa 100644 --- a/commafeed-server/src/test/java/com/commafeed/backend/UrlsTest.java +++ b/commafeed-server/src/test/java/com/commafeed/backend/UrlsTest.java @@ -62,6 +62,10 @@ class UrlsTest { Assertions.assertEquals("http://ergoemacs.org/emacs/elisp_all_about_lines.html", Urls.toAbsolute("elisp_all_about_lines.html", "blog.xml", "http://ergoemacs.org/emacs/blog.xml")); + // invalid relative urls + Assertions.assertEquals("title:10001280", + Urls.toAbsolute("title:10001280", "https://www.berliner-zeitung.de", "https://www.berliner-zeitung.de/feed.xml")); + } @Test