From 052ef9fcb89d63ad0b66cc16bad53789cab063a0 Mon Sep 17 00:00:00 2001 From: Jason Hiltz-Laforge Date: Thu, 24 Jul 2014 18:25:50 +0000 Subject: [PATCH] Reorder constructor to avoid referencing uninitialized variable when environment contains a self-referencing proc --- lib/liquid/context.rb | 12 ++++++------ test/unit/context_unit_test.rb | 8 ++++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/liquid/context.rb b/lib/liquid/context.rb index d3b063c..faa3da2 100644 --- a/lib/liquid/context.rb +++ b/lib/liquid/context.rb @@ -19,11 +19,12 @@ module Liquid SQUARE_BRACKETED = /\A\[(.*)\]\z/m def initialize(environments = {}, outer_scope = {}, registers = {}, rethrow_errors = false, resource_limits = {}) - @environments = [environments].flatten - @scopes = [(outer_scope || {})] - @registers = registers - @errors = [] - @resource_limits = (resource_limits || {}).merge!({ :render_score_current => 0, :assign_score_current => 0 }) + @environments = [environments].flatten + @scopes = [(outer_scope || {})] + @registers = registers + @errors = [] + @resource_limits = (resource_limits || {}).merge!({ :render_score_current => 0, :assign_score_current => 0 }) + @parsed_variables = Hash.new{ |cache, markup| cache[markup] = variable_parse(markup) } squash_instance_assigns_with_environments if rethrow_errors @@ -32,7 +33,6 @@ module Liquid @interrupts = [] @filters = [] - @parsed_variables = Hash.new{ |cache, markup| cache[markup] = variable_parse(markup) } end def increment_used_resources(key, obj) diff --git a/test/unit/context_unit_test.rb b/test/unit/context_unit_test.rb index 0b2d0a4..1b8d717 100644 --- a/test/unit/context_unit_test.rb +++ b/test/unit/context_unit_test.rb @@ -483,4 +483,12 @@ class ContextUnitTest < Test::Unit::TestCase assert_equal 1, mock_scan.calls.size end + def test_context_initialization_with_a_proc_in_environment + contx = Context.new([:test => lambda { |c| c['poutine']}], {:test => :foo}) + + assert contx + assert_nil contx['poutine'] + end + + end # ContextTest