From a90b86fdf70a06fae5480c384590094a7054852c Mon Sep 17 00:00:00 2001 From: Marcel Otto Date: Tue, 18 Mar 2025 16:58:35 +0100 Subject: [PATCH] Fix URI.merge/2 for hostless absolute base URIs --- lib/elixir/lib/uri.ex | 2 +- lib/elixir/test/elixir/uri_test.exs | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/elixir/lib/uri.ex b/lib/elixir/lib/uri.ex index c4702bb904b..3fe731ff12a 100644 --- a/lib/elixir/lib/uri.ex +++ b/lib/elixir/lib/uri.ex @@ -903,7 +903,7 @@ defmodule URI do @spec merge(t | binary, t | binary) :: t def merge(uri, rel) - def merge(%URI{host: nil}, _rel) do + def merge(%URI{scheme: nil}, _rel) do raise ArgumentError, "you must merge onto an absolute URI" end diff --git a/lib/elixir/test/elixir/uri_test.exs b/lib/elixir/test/elixir/uri_test.exs index 0f219bfc7e1..a46efad2380 100644 --- a/lib/elixir/test/elixir/uri_test.exs +++ b/lib/elixir/test/elixir/uri_test.exs @@ -460,6 +460,11 @@ defmodule URITest do "https://images.example.com/t/1600x/https://images.example.com/foo.jpg" end + test "merge/2 with host-less URIs" do + assert URI.merge("tag:example", "foo") |> to_string == "tag:foo" + assert URI.merge("tag:example", "#fragment") |> to_string == "tag:example#fragment" + end + test "merge/2 (with RFC examples)" do # These are examples from: #