Merge pull request #1331 from Shopify/pz-freeze-block

Freeze block body after parsing completes
This commit is contained in:
Peter Zhu
2020-10-27 13:17:54 -04:00
committed by GitHub
6 changed files with 19 additions and 4 deletions

View File

@@ -13,6 +13,7 @@ module Liquid
@body = new_body
while parse_body(@body, tokens)
end
@body.freeze
end
# For backwards compatibility

View File

@@ -19,6 +19,8 @@ module Liquid
end
def parse(tokenizer, parse_context, &block)
raise FrozenError, "can't modify frozen Liquid::BlockBody" if frozen?
parse_context.line_number = tokenizer.line_number
if tokenizer.for_liquid_tag
@@ -28,6 +30,11 @@ module Liquid
end
end
def freeze
@nodelist.freeze
super
end
private def parse_for_liquid_tag(tokenizer, parse_context)
while (token = tokenizer.shift)
unless token.empty? || token =~ WhitespaceOrNothing
@@ -192,6 +199,8 @@ module Liquid
end
def render_to_output_buffer(context, output)
freeze unless frozen?
context.resource_limits.increment_render_score(@nodelist.length)
idx = 0

View File

@@ -22,6 +22,7 @@ module Liquid
def parse(tokenizer, parse_context)
while parse_body(tokenizer)
end
@body.freeze
rescue SyntaxError => e
e.line_number ||= parse_context.line_number
raise

View File

@@ -21,8 +21,9 @@ module Liquid
def parse(tokens)
body = new_body
body = @blocks.last.attachment while parse_body(body, tokens)
if blank?
@blocks.each { |condition| condition.attachment.remove_blank_strings }
@blocks.each do |condition|
condition.attachment.remove_blank_strings if blank?
condition.attachment.freeze
end
end

View File

@@ -66,6 +66,8 @@ module Liquid
@for_block.remove_blank_strings
@else_block&.remove_blank_strings
end
@for_block.freeze
@else_block&.freeze
end
def nodelist

View File

@@ -31,8 +31,9 @@ module Liquid
def parse(tokens)
while parse_body(@blocks.last.attachment, tokens)
end
if blank?
@blocks.each { |condition| condition.attachment.remove_blank_strings }
@blocks.each do |block|
block.attachment.remove_blank_strings if blank?
block.attachment.freeze
end
end