From e1b64f9afd8391b9aeaea6a3b00700a8851585d1 Mon Sep 17 00:00:00 2001 From: ashmaroli Date: Sat, 10 Mar 2018 07:39:55 +0530 Subject: [PATCH] Change regex to sanitize and normalize filenames passed to LiquidRenderer (#6610) Merge pull request 6610 --- lib/jekyll/liquid_renderer.rb | 22 +++++++++++++++++----- script/default-site | 2 +- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/jekyll/liquid_renderer.rb b/lib/jekyll/liquid_renderer.rb index 3c731724..65d3770d 100644 --- a/lib/jekyll/liquid_renderer.rb +++ b/lib/jekyll/liquid_renderer.rb @@ -5,6 +5,11 @@ require_relative "liquid_renderer/table" module Jekyll class LiquidRenderer + extend Forwardable + + def_delegator :@site, :in_source_dir, :source_dir + def_delegator :@site, :in_theme_dir, :theme_dir + def initialize(site) @site = site Liquid::Template.error_mode = @site.config["liquid"]["error_mode"].to_sym @@ -16,11 +21,13 @@ module Jekyll end def file(filename) - filename = @site.in_source_dir(filename).sub( - %r!\A#{Regexp.escape(@site.source)}/!, - "" - ) - + filename.match(filename_regex) + filename = + if Regexp.last_match(1) == theme_dir("") + ::File.join(Regexp.last_match(1).split("/")[-1], Regexp.last_match(2)) + else + Regexp.last_match(2) + end LiquidRenderer::File.new(self, filename).tap do @stats[filename] ||= new_profile_hash @stats[filename][:count] += 1 @@ -44,6 +51,11 @@ module Jekyll end private + + def filename_regex + %r!\A(#{source_dir}/|#{theme_dir}/|\W*)(.*)!oi + end + def new_profile_hash Hash.new { |hash, key| hash[key] = 0 } end diff --git a/script/default-site b/script/default-site index 899524a7..0504fd38 100755 --- a/script/default-site +++ b/script/default-site @@ -16,5 +16,5 @@ ruby -e "contents = File.read('Gemfile'); File.write('Gemfile', contents.sub(/ge echo "$0: installing default site dependencies" BUNDLE_GEMFILE=Gemfile bundle install echo "$0: building the default site" -BUNDLE_GEMFILE=Gemfile bundle exec jekyll build --verbose +BUNDLE_GEMFILE=Gemfile bundle exec jekyll build --verbose --profile popd