diff --git a/lib/modules/Standards.pmod/URI.pike b/lib/modules/Standards.pmod/URI.pike index 903b2f410c12690aa5b01504cd97861af9c90585..7809b5f6a8c52b1099f85ad79b6927f2daa28f2f 100644 --- a/lib/modules/Standards.pmod/URI.pike +++ b/lib/modules/Standards.pmod/URI.pike @@ -263,6 +263,14 @@ void reparse_uri(this_program|string|void base_uri) } DEBUG("Found scheme %O", scheme); + // DWIM for "www.cnn.com" style input, when parsed in the context of + // base "http://". + if( !scheme && this_program::base_uri?->scheme && + !sizeof(this_program::base_uri->authority) ) + { + uri = "//"+uri; + } + // Parse authority/login // // hier-part = "//" authority path-abempty / path-absolute diff --git a/lib/modules/Standards.pmod/testsuite.in b/lib/modules/Standards.pmod/testsuite.in index fcaa3a3eddcb9450fb318b4c981964e955d01544..b6350d5530d53f3fdb5d9b135475ee1142b003ae 100644 --- a/lib/modules/Standards.pmod/testsuite.in +++ b/lib/modules/Standards.pmod/testsuite.in @@ -105,6 +105,7 @@ test_equal(Standards.URI("http://www.com/?")->get_http_path_query(),"/?") test_equal(Standards.URI("http://www.com/")->get_http_path_query(),"/") 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") test_eq((string)Standards.URI("ftp://www.com/x?a=b#y","http://"),"ftp://www.com/x?a=b#y") // Some tests of empty path followed by a query. test_eq(Standards.URI("http://user:??@host?query")->query, "query")