From f0cc366cfc6a646f971db5ccf4fc473719fc8a8e Mon Sep 17 00:00:00 2001 From: Dylan Thacker-Smith Date: Wed, 30 Sep 2020 10:00:17 -0400 Subject: [PATCH] Fix missing freeze for array of static environments --- lib/liquid/context.rb | 7 ++++--- test/integration/context_test | 11 +++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/liquid/context.rb b/lib/liquid/context.rb index f91b5ff..cc7764b 100644 --- a/lib/liquid/context.rb +++ b/lib/liquid/context.rb @@ -18,15 +18,16 @@ module Liquid attr_accessor :exception_renderer, :template_name, :partial, :global_filter, :strict_variables, :strict_filters # rubocop:disable Metrics/ParameterLists - def self.build(environments: {}, outer_scope: {}, registers: {}, rethrow_errors: false, resource_limits: nil, static_environments: {}) + def self.build(environments: {}, outer_scope: {}, registers: {}, rethrow_errors: false, resource_limits: nil, static_environments: []) new(environments, outer_scope, registers, rethrow_errors, resource_limits, static_environments) end - def initialize(environments = {}, outer_scope = {}, registers = {}, rethrow_errors = false, resource_limits = nil, static_environments = {}) + def initialize(environments = {}, outer_scope = {}, registers = {}, rethrow_errors = false, resource_limits = nil, static_environments = []) @environments = [environments] @environments.flatten! - @static_environments = [static_environments].flat_map(&:freeze).freeze + static_environments = [static_environments] if static_environments.is_a?(Hash) + @static_environments = static_environments.map(&:freeze).freeze @scopes = [(outer_scope || {})] @registers = registers @errors = [] diff --git a/test/integration/context_test b/test/integration/context_test index 85f1b1f..d739663 100644 --- a/test/integration/context_test +++ b/test/integration/context_test @@ -492,6 +492,17 @@ class ContextTest < Minitest::Test assert_equal('static', context['unshadowed']) end + def test_static_environments_are_frozen + context = Context.build( + static_environments: [{ + 'lazy' => -> { 1 } + }], + ) + assert_raises(FrozenError) do + context['lazy'] + end + end + def test_apply_global_filter_when_no_global_filter_exist context = Context.new assert_equal('hi', context.apply_global_filter('hi'))