diff --git a/lib/modules/Standards.pmod/URI.pike b/lib/modules/Standards.pmod/URI.pike index c7e47ea07794a693fef772469cdf1495e0891ac9..c5bb0de04f66484dcbf23cbd59beed44716a7317 100644 --- a/lib/modules/Standards.pmod/URI.pike +++ b/lib/modules/Standards.pmod/URI.pike @@ -265,9 +265,11 @@ void reparse_uri(this_program|string|void base_uri) // DWIM for "www.cnn.com" style input, when parsed in the context of // base "http://". - if( !scheme && this::base_uri?->scheme && - !sizeof(this::base_uri->authority) ) + if( !has_prefix(uri, "//") && !scheme && this::base_uri?->scheme && + !sizeof(this::base_uri->authority) && + !sizeof(this::base_uri->path)) { + DEBUG("DWIM authority: %O\n", uri); uri = "//"+uri; } diff --git a/lib/modules/Standards.pmod/testsuite.in b/lib/modules/Standards.pmod/testsuite.in index ff2964e6207dc27e7846541f27cdc70d24259b3f..ea1d26b69bdbcaf450c491eeb0ed044c947cb343 100644 --- a/lib/modules/Standards.pmod/testsuite.in +++ b/lib/modules/Standards.pmod/testsuite.in @@ -103,6 +103,9 @@ test_equal(Standards.URI("http://www.com/?a=b&c")->get_query_variables(),(["a":" test_equal(Standards.URI("http://www.com/?foo")->get_http_path_query(),"/?foo") test_equal(Standards.URI("http://www.com/?")->get_http_path_query(),"/?") test_equal(Standards.URI("http://www.com/")->get_http_path_query(),"/") +test_equal((string)Standards.URI("://"), "://") +test_equal((string)Standards.URI("/", "://"), ":///") +test_equal((string)Standards.URI("foo.bar", ":///"), ":///foo.bar") test_eval_error(Standards.URI("www.com")) test_eq((string)Standards.URI("www.com","http://"),"http://www.com") test_eq((string)Standards.URI("www.com/x?a=b#y","http://"),"http://www.com/x?a=b#y")