Module: FreedomPatches::SafeBuffer

Defined in:
lib/freedom_patches/safe_buffer.rb

Instance Method Summary collapse

Instance Method Details

#concat(value, raise_encoding_err = false) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/freedom_patches/safe_buffer.rb', line 10

def concat(value, raise_encoding_err = false)
  super(value)
rescue Encoding::CompatibilityError
  raise if raise_encoding_err

  encoding_diags =
    +"internal encoding #{Encoding.default_internal}, external encoding #{Encoding.default_external}"
  if encoding != Encoding::UTF_8
    encoding_diags << " my encoding is #{encoding} "
    force_encoding("UTF-8")
    unless valid_encoding?
      encode!("utf-16", "utf-8", invalid: :replace)
      encode!("utf-8", "utf-16")
    end
    Rails.logger.warn(
      "Encountered a non UTF-8 string in SafeBuffer - #{self} - #{encoding_diags}",
    )
  end
  if value.encoding != Encoding::UTF_8
    encoding_diags << " attempted to append encoding  #{value.encoding} "
    value = value.dup.force_encoding("UTF-8").scrub
    Rails.logger.warn(
      "Attempted to concat a non UTF-8 string in SafeBuffer - #{value} - #{encoding_diags}",
    )
  end
  concat(value, _raise = true)
end