Skip to content

Commit 54e3d23

Browse files
committed
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 /'); #" %}
1 parent 7be2922 commit 54e3d23

File tree

3 files changed

+5
-5
lines changed

3 files changed

+5
-5
lines changed

lib/liquid/compile/ruby_compiler.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ def compile_partials(code)
303303
compile_partial_source(source, code)
304304
rescue => e
305305
code.line "# Error compiling partial: #{e.message.inspect}"
306-
code.line "__partial_output__ << '[PARTIAL ERROR: #{name}]'"
306+
code.line "__partial_output__ << '[PARTIAL ERROR: ' + #{name.inspect} + ']'"
307307
end
308308

309309
code.blank_line

lib/liquid/compile/tags/include_compiler.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ def self.compile_static_include(tag, template_name, compiler, code)
3737

3838
if partial_source
3939
if compiler.debug?
40-
code.line "# Inlined partial '#{template_name}' at compile time"
41-
code.line "$stderr.puts '* WARN: Liquid file system access - inlined partial \\\"#{template_name}\\\" at compile time' if $VERBOSE"
40+
code.line "# Inlined partial #{template_name.inspect} at compile time"
41+
code.line "$stderr.puts '* WARN: Liquid file system access - inlined partial ' + #{template_name.inspect} + ' at compile time' if $VERBOSE"
4242
end
4343
# Generate a unique method name for this partial
4444
method_name = compiler.register_partial(template_name, partial_source)

lib/liquid/compile/tags/render_compiler.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ def self.compile_static_render(tag, template_name, compiler, code)
3939

4040
if partial_source
4141
if compiler.debug?
42-
code.line "# Inlined partial '#{template_name}' at compile time"
43-
code.line "$stderr.puts '* WARN: Liquid file system access - inlined partial \\\"#{template_name}\\\" at compile time' if $VERBOSE"
42+
code.line "# Inlined partial #{template_name.inspect} at compile time"
43+
code.line "$stderr.puts '* WARN: Liquid file system access - inlined partial ' + #{template_name.inspect} + ' at compile time' if $VERBOSE"
4444
end
4545
# Generate a unique method name for this partial
4646
method_name = compiler.register_partial(template_name, partial_source)

0 commit comments

Comments
 (0)