Fix code injection vulnerability in template name handling

Use .inspect for all template/partial names inserted into generated
code strings to prevent code injection via maliciously crafted
template names like: {% render "foo'); system('rm -rf /'); #" %}
This commit is contained in:
Claude
2025-12-31 15:05:20 +00:00
parent 7be2922f91
commit 54e3d2328a
3 changed files with 5 additions and 5 deletions
+1 -1
View File
@@ -303,7 +303,7 @@ module Liquid
compile_partial_source(source, code)
rescue => e
code.line "# Error compiling partial: #{e.message.inspect}"
code.line "__partial_output__ << '[PARTIAL ERROR: #{name}]'"
code.line "__partial_output__ << '[PARTIAL ERROR: ' + #{name.inspect} + ']'"
end
code.blank_line
+2 -2
View File
@@ -37,8 +37,8 @@ module Liquid
if partial_source
if compiler.debug?
code.line "# Inlined partial '#{template_name}' at compile time"
code.line "$stderr.puts '* WARN: Liquid file system access - inlined partial \\\"#{template_name}\\\" at compile time' if $VERBOSE"
code.line "# Inlined partial #{template_name.inspect} at compile time"
code.line "$stderr.puts '* WARN: Liquid file system access - inlined partial ' + #{template_name.inspect} + ' at compile time' if $VERBOSE"
end
# Generate a unique method name for this partial
method_name = compiler.register_partial(template_name, partial_source)
+2 -2
View File
@@ -39,8 +39,8 @@ module Liquid
if partial_source
if compiler.debug?
code.line "# Inlined partial '#{template_name}' at compile time"
code.line "$stderr.puts '* WARN: Liquid file system access - inlined partial \\\"#{template_name}\\\" at compile time' if $VERBOSE"
code.line "# Inlined partial #{template_name.inspect} at compile time"
code.line "$stderr.puts '* WARN: Liquid file system access - inlined partial ' + #{template_name.inspect} + ' at compile time' if $VERBOSE"
end
# Generate a unique method name for this partial
method_name = compiler.register_partial(template_name, partial_source)