From 1fba5bc73613164a3d43892e6f7f9b721d91440b Mon Sep 17 00:00:00 2001 From: Masahiro Nakagawa Date: Mon, 22 Aug 2016 08:56:55 +0900 Subject: [PATCH] Merge pull request #1176 from sonots/prevent_overwriting_reserved_placeholders Fix to prevent overwriting reserved placeholder keys such as tag --- .../plugin/filter_record_transformer.rb | 4 +++- test/plugin/test_filter_record_transformer.rb | 22 +++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/lib/fluent/plugin/filter_record_transformer.rb b/lib/fluent/plugin/filter_record_transformer.rb index d86664294c..9396e38ad9 100644 --- a/lib/fluent/plugin/filter_record_transformer.rb +++ b/lib/fluent/plugin/filter_record_transformer.rb @@ -204,7 +204,9 @@ def prepare_placeholders(placeholder_values) end elsif value.kind_of?(Hash) # record, etc value.each do |k, v| - placeholders.store("${#{k}}", v) # foo + unless placeholder_values.has_key?(k) # prevent overwriting reserved keys such as tag + placeholders.store("${#{k}}", v) # foo + end placeholders.store(%Q[${#{key}["#{k}"]}], v) # record["foo"] end else # string, interger, float, and others? diff --git a/test/plugin/test_filter_record_transformer.rb b/test/plugin/test_filter_record_transformer.rb index 8b94cf7eba..1a4a66659d 100644 --- a/test/plugin/test_filter_record_transformer.rb +++ b/test/plugin/test_filter_record_transformer.rb @@ -172,10 +172,7 @@ def emit(config, msgs = ['']) yield d if block_given? d.run { msgs.each do |msg| - record = { - 'eventType0' => 'bar', - 'message' => msg, - } + record = {'eventType0' => 'bar', 'message' => msg} record = record.merge(msg) if msg.is_a?(Hash) d.emit(record, @time) end @@ -269,6 +266,23 @@ def emit(config, msgs = ['']) end end + test "Prevent overwriting reserved keys such as tag with enable_ruby #{enable_ruby}" do + config = %[ + enable_ruby #{enable_ruby} + + new_tag ${tag} + new_record_tag ${record["tag"]} + + ] + records = [{'tag' => 'tag', 'time' => 'time'}] + filtered = filter(config, records) + filtered.each_with_index do |(_t, r), i| + assert_not_equal('tag', r['new_tag']) + assert_equal(@tag, r['new_tag']) + assert_equal('tag', r['new_record_tag']) + end + end + test "hash values with placeholders with enable_ruby #{enable_ruby}" do config = %[ enable_ruby #{enable_ruby}