From 5dcefd7d77382ddabf7f727475370c0b4d1c7dae Mon Sep 17 00:00:00 2001 From: Dylan Thacker-Smith Date: Tue, 7 Feb 2017 15:34:10 -0500 Subject: [PATCH 1/2] Avoid calling line_number on String node when rescuing a render error. --- lib/liquid/block_body.rb | 5 +++-- lib/liquid/context.rb | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/liquid/block_body.rb b/lib/liquid/block_body.rb index 4e2a4c90..d69af1aa 100644 --- a/lib/liquid/block_body.rb +++ b/lib/liquid/block_body.rb @@ -93,10 +93,11 @@ module Liquid rescue MemoryError => e raise e rescue UndefinedVariable, UndefinedDropMethod, UndefinedFilter => e - context.handle_error(e, token.line_number, token.raw) + context.handle_error(e, token.line_number) output << nil rescue ::StandardError => e - output << context.handle_error(e, token.line_number, token.raw) + line_number = token.is_a?(String) ? nil : token.line_number + output << context.handle_error(e, line_number) end end diff --git a/lib/liquid/context.rb b/lib/liquid/context.rb index 6ba23539..2a5ea413 100644 --- a/lib/liquid/context.rb +++ b/lib/liquid/context.rb @@ -74,7 +74,7 @@ module Liquid @interrupts.pop end - def handle_error(e, line_number = nil, raw_token = nil) + def handle_error(e, line_number = nil) e = internal_error unless e.is_a?(Liquid::Error) e.template_name ||= template_name e.line_number ||= line_number From 7334073be272c6560baf89475ecbdece84ad8bfb Mon Sep 17 00:00:00 2001 From: Dylan Thacker-Smith Date: Fri, 10 Feb 2017 13:49:26 -0500 Subject: [PATCH 2/2] Avoid duck typing to detect whether to call render on a node. --- lib/liquid/block_body.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/liquid/block_body.rb b/lib/liquid/block_body.rb index d69af1aa..6c9b680e 100644 --- a/lib/liquid/block_body.rb +++ b/lib/liquid/block_body.rb @@ -107,7 +107,7 @@ module Liquid private def render_node(node, context) - node_output = (node.respond_to?(:render) ? node.render(context) : node) + node_output = node.is_a?(String) ? node : node.render(context) node_output = node_output.is_a?(Array) ? node_output.join : node_output.to_s context.resource_limits.render_length += node_output.length