From 6cbd534db0b34435173d6bb9d1c459ed79b87b94 Mon Sep 17 00:00:00 2001 From: ts Date: Wed, 17 Oct 2018 14:41:32 +0100 Subject: [PATCH] Enforce encoding utf-8 --- lib/objects/local_string_encoder.rb | 22 ++++++++++++++++++---- lib/objects/system.rb | 2 +- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/lib/objects/local_string_encoder.rb b/lib/objects/local_string_encoder.rb index 862d8bcc8..14c7c2478 100644 --- a/lib/objects/local_string_encoder.rb +++ b/lib/objects/local_string_encoder.rb @@ -116,7 +116,7 @@ class StringEncoder Print.local module_name read_arguments - enforce_utf8(self.strings_to_encode) + enforce_utf8 Print.local_verbose "Encoding '#{encoding_print_string}'" encode_all @@ -131,12 +131,26 @@ class StringEncoder Print.local_verbose "(Displaying 1000/#{length} length output)" end - enforce_utf8(self.outputs) + enforce_utf8 print_outputs end - def enforce_utf8(values) - values.map { |o| o.force_encoding('UTF-8') } + # Encode local instance variables as UTF-8 + def enforce_utf8 + self.instance_variables.each do |iv| + iv_value = self.instance_variable_get(iv) + if iv_value.is_a? Array + utf8 = [] + iv_value.map {|element| + if element.is_a? String + utf8 << element.force_encoding('UTF-8') + end + } + self.instance_variable_set(iv, utf8) + elsif iv_value.is_a? String + self.instance_variable_set(iv, iv_value.force_encoding('UTF-8')) + end + end end def print_outputs diff --git a/lib/objects/system.rb b/lib/objects/system.rb index d822c09db..217375a1b 100644 --- a/lib/objects/system.rb +++ b/lib/objects/system.rb @@ -332,7 +332,7 @@ class System raise 'failed' end output_array = outputs.split("\n") - selected.output = output_array.map { |o| Base64.strict_decode64 o } + selected.output = output_array.map { |o| (Base64.strict_decode64 o).force_encoding('UTF-8') } end # store the output of the module into a datastore, if specified