Browse Source

AK: Make sure URL retains trailing slash if present in complete_url

Conrad Pankoff 5 years ago
parent
commit
b5b08fba92
2 changed files with 17 additions and 1 deletions
  1. 8 0
      AK/Tests/TestURL.cpp
  2. 9 1
      AK/URL.cpp

+ 8 - 0
AK/Tests/TestURL.cpp

@@ -157,4 +157,12 @@ TEST_CASE(about_url)
     EXPECT_EQ(url.to_string(), "about:blank");
     EXPECT_EQ(url.to_string(), "about:blank");
 }
 }
 
 
+TEST_CASE(trailing_slash_with_complete_url)
+{
+    EXPECT_EQ(URL("http://a/b/").complete_url("c/").to_string(), "http://a/b/c/");
+    EXPECT_EQ(URL("http://a/b/").complete_url("c").to_string(), "http://a/b/c");
+    EXPECT_EQ(URL("http://a/b").complete_url("c/").to_string(), "http://a/c/");
+    EXPECT_EQ(URL("http://a/b").complete_url("c").to_string(), "http://a/c");
+}
+
 TEST_MAIN(URL)
 TEST_MAIN(URL)

+ 9 - 1
AK/URL.cpp

@@ -323,8 +323,16 @@ URL URL::complete_url(const String& string) const
     auto built = builder.to_string();
     auto built = builder.to_string();
     fspath = FileSystemPath(built);
     fspath = FileSystemPath(built);
 
 
+    built = fspath.string();
+    if (string.ends_with('/') && !built.ends_with('/')) {
+        builder.clear();
+        builder.append(built);
+        builder.append('/');
+        built = builder.to_string();
+    }
+
     url = *this;
     url = *this;
-    url.set_path(fspath.string());
+    url.set_path(built);
     return url;
     return url;
 }
 }