mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-26 13:45:13 -07:00
Convert render output to strings in BlockBody
This commit is contained in:
@@ -104,11 +104,13 @@ module Liquid
|
|||||||
|
|
||||||
def render_token(token, context)
|
def render_token(token, context)
|
||||||
token_output = (token.respond_to?(:render) ? token.render(context) : token)
|
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?
|
if context.resource_limits.reached?
|
||||||
raise MemoryError.new("Memory limits exceeded".freeze)
|
raise MemoryError.new("Memory limits exceeded".freeze)
|
||||||
end
|
end
|
||||||
token_output
|
token_str
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_variable(token, options)
|
def create_variable(token, options)
|
||||||
|
|||||||
@@ -18,22 +18,5 @@ module Liquid
|
|||||||
(@render_score_limit && @render_score > @render_score_limit ) ||
|
(@render_score_limit && @render_score > @render_score_limit ) ||
|
||||||
(@assign_score_limit && @assign_score > @assign_score_limit )
|
(@assign_score_limit && @assign_score > @assign_score_limit )
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -25,7 +25,10 @@ module Liquid
|
|||||||
def render(context)
|
def render(context)
|
||||||
val = @from.render(context)
|
val = @from.render(context)
|
||||||
context.scopes.last[@to] = val
|
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
|
''.freeze
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ module Liquid
|
|||||||
def render(context)
|
def render(context)
|
||||||
output = super
|
output = super
|
||||||
context.scopes.last[@to] = output
|
context.scopes.last[@to] = output
|
||||||
context.resource_limits.increment_assign_score(output)
|
context.resource_limits.assign_score += output.length
|
||||||
''.freeze
|
''.freeze
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user