From 6eee8b7e064a65e94b8d4c23be9b53c53d6b20ff Mon Sep 17 00:00:00 2001 From: Ashwin Maroli Date: Mon, 24 Sep 2018 22:57:44 +0530 Subject: [PATCH] Strip extra slashes via `Jekyll.sanitized_path` (#7182) Merge pull request 7182 --- lib/jekyll.rb | 4 ++++ test/test_path_sanitization.rb | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/lib/jekyll.rb b/lib/jekyll.rb index fe4af084..2b0e6382 100644 --- a/lib/jekyll.rb +++ b/lib/jekyll.rb @@ -176,6 +176,10 @@ module Jekyll return clean_path if clean_path.eql?(base_directory) + # remove any remaining extra leading slashes not stripped away by calling + # `File.expand_path` above. + clean_path.squeeze!("/") + if clean_path.start_with?(base_directory.sub(%r!\z!, "/")) clean_path else diff --git a/test/test_path_sanitization.rb b/test/test_path_sanitization.rb index 184385fa..546d2176 100644 --- a/test/test_path_sanitization.rb +++ b/test/test_path_sanitization.rb @@ -31,6 +31,13 @@ class TestPathSanitization < JekyllUnitTest Jekyll.sanitized_path(source_dir, "f./../../../../../../files/hi.txt") end + should "strip extra slashes in questionable path" do + subdir = "/files/" + file_path = "/hi.txt" + assert_equal source_dir("files", "hi.txt"), + Jekyll.sanitized_path(source_dir, "/#{subdir}/#{file_path}") + end + if Jekyll::Utils::Platforms.really_windows? context "on Windows with absolute path" do setup do