From c528fb198597db81b944895efba1ee381f1f154a Mon Sep 17 00:00:00 2001 From: Hartley McGuire Date: Fri, 7 Nov 2025 13:32:01 -0500 Subject: [PATCH] Fix failure file dump when output has invalid UTF8 Previously, any invalid UTF-8 in test output would prevent the entire JSON failure file from being dumped, because the Ruby JSON library validates that its output is UTF-8. This commit aims to fix this issue by encoding the output as UTF-8 before it gets to JSON so that the file can always be dumped. --- ruby/lib/minitest/queue/failure_formatter.rb | 8 +++----- .../minitest/queue/failure_formatter_test.rb | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 ruby/test/minitest/queue/failure_formatter_test.rb diff --git a/ruby/lib/minitest/queue/failure_formatter.rb b/ruby/lib/minitest/queue/failure_formatter.rb index 9b6ca97f..59ba6c19 100644 --- a/ruby/lib/minitest/queue/failure_formatter.rb +++ b/ruby/lib/minitest/queue/failure_formatter.rb @@ -13,11 +13,9 @@ def initialize(test) end def to_s - [ - header, - body, - "\n" - ].flatten.compact.join("\n") + s = +"#{header}\n#{body}\n\n" + s.encode!(Encoding::UTF_8, invalid: :replace, undef: :replace) + s end def to_h diff --git a/ruby/test/minitest/queue/failure_formatter_test.rb b/ruby/test/minitest/queue/failure_formatter_test.rb new file mode 100644 index 00000000..2d5ca2e8 --- /dev/null +++ b/ruby/test/minitest/queue/failure_formatter_test.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +require 'test_helper' + +module Minitest::Queue + class FailureFormatterTest < Minitest::Test + include ReporterTestHelper + + def test_failure_formatter_to_h_can_be_json_dumped + test = result('test_json', failure: "\xD6".b) + + formatter = FailureFormatter.new(test) + + assert JSON.dump(formatter.to_h) + end + end +end