From 9f7e6011109e0f979043f89542f5bcebea51e407 Mon Sep 17 00:00:00 2001 From: Justin Li Date: Fri, 5 Dec 2014 15:17:09 -0500 Subject: [PATCH] Convert render output to strings in BlockBody --- lib/liquid/block_body.rb | 6 ++++-- lib/liquid/resource_limits.rb | 17 ----------------- lib/liquid/tags/assign.rb | 5 ++++- lib/liquid/tags/capture.rb | 2 +- 4 files changed, 9 insertions(+), 21 deletions(-) diff --git a/lib/liquid/block_body.rb b/lib/liquid/block_body.rb index 1d2127ac..99998269 100644 --- a/lib/liquid/block_body.rb +++ b/lib/liquid/block_body.rb @@ -104,11 +104,13 @@ module Liquid def render_token(token, context) token_output = (token.respond_to?(:render) ? token.render(context) : token) - context.resource_limits.increment_render_length(token_output) + token_str = token_output.is_a?(Array) ? token_output.join : token_output.to_s + + context.resource_limits.render_length += token_str.length if context.resource_limits.reached? raise MemoryError.new("Memory limits exceeded".freeze) end - token_output + token_str end def create_variable(token, options) diff --git a/lib/liquid/resource_limits.rb b/lib/liquid/resource_limits.rb index 3f9bdbab..63731307 100644 --- a/lib/liquid/resource_limits.rb +++ b/lib/liquid/resource_limits.rb @@ -18,22 +18,5 @@ module Liquid (@render_score_limit && @render_score > @render_score_limit ) || (@assign_score_limit && @assign_score > @assign_score_limit ) end - - def increment_render_length(obj) - @render_length += increment_for(obj) - end - - def increment_render_score(obj) - @render_score += increment_for(obj) - end - - def increment_assign_score(obj) - @assign_score += increment_for(obj) - end - - private - def increment_for(obj) - obj.instance_of?(String) || obj.instance_of?(Array) || obj.instance_of?(Hash) ? obj.length : 1 - end end end diff --git a/lib/liquid/tags/assign.rb b/lib/liquid/tags/assign.rb index 2db8c836..f1dfb195 100644 --- a/lib/liquid/tags/assign.rb +++ b/lib/liquid/tags/assign.rb @@ -25,7 +25,10 @@ module Liquid def render(context) val = @from.render(context) context.scopes.last[@to] = val - context.resource_limits.increment_assign_score(val) + + inc = val.instance_of?(String) || val.instance_of?(Array) || val.instance_of?(Hash) ? val.length : 1 + context.resource_limits.assign_score += inc + ''.freeze end diff --git a/lib/liquid/tags/capture.rb b/lib/liquid/tags/capture.rb index 4df902f7..6ec8a710 100644 --- a/lib/liquid/tags/capture.rb +++ b/lib/liquid/tags/capture.rb @@ -25,7 +25,7 @@ module Liquid def render(context) output = super context.scopes.last[@to] = output - context.resource_limits.increment_assign_score(output) + context.resource_limits.assign_score += output.length ''.freeze end