Commit f390be8a authored by Kamil Trzciński's avatar Kamil Trzciński

Merge branch 'enforce-Ansi2html-output-encoding' into 'master'

Just enforce the output encoding for Ansi2html

See merge request !10758
parents 554d2974 fb60c618
---
title: Fix trace cannot be written due to encoding
merge_request: 10758
author:
...@@ -172,7 +172,7 @@ module Ci ...@@ -172,7 +172,7 @@ module Ci
close_open_tags() close_open_tags()
OpenStruct.new( OpenStruct.new(
html: @out, html: @out.force_encoding(Encoding.default_external),
state: state, state: state,
append: append, append: append,
truncated: truncated, truncated: truncated,
......
...@@ -14,14 +14,7 @@ module Gitlab ...@@ -14,14 +14,7 @@ module Gitlab
def initialize def initialize
@stream = yield @stream = yield
if @stream @stream&.binmode
@stream.binmode
# Ci::Ansi2html::Converter would read from @stream directly,
# using @stream.each_line to be specific. It's safe to set
# the encoding here because IO#seek(bytes) and IO#read(bytes)
# are not characters based, so encoding doesn't matter to them.
@stream.set_encoding(Encoding.default_external)
end
end end
def valid? def valid?
...@@ -68,8 +61,8 @@ module Gitlab ...@@ -68,8 +61,8 @@ module Gitlab
def html(last_lines: nil) def html(last_lines: nil)
text = raw(last_lines: last_lines) text = raw(last_lines: last_lines)
stream = StringIO.new(text) buffer = StringIO.new(text)
::Ci::Ansi2html.convert(stream).html ::Ci::Ansi2html.convert(buffer).html
end end
def extract_coverage(regex) def extract_coverage(regex)
......
...@@ -71,12 +71,20 @@ describe Gitlab::Ci::Trace::Stream do ...@@ -71,12 +71,20 @@ describe Gitlab::Ci::Trace::Stream do
end end
describe '#append' do describe '#append' do
let(:tempfile) { Tempfile.new }
let(:stream) do let(:stream) do
described_class.new do described_class.new do
StringIO.new("12345678") tempfile.write("12345678")
tempfile.rewind
tempfile
end end
end end
after do
tempfile.unlink
end
it "truncates and append content" do it "truncates and append content" do
stream.append("89", 4) stream.append("89", 4)
stream.seek(0) stream.seek(0)
...@@ -84,6 +92,17 @@ describe Gitlab::Ci::Trace::Stream do ...@@ -84,6 +92,17 @@ describe Gitlab::Ci::Trace::Stream do
expect(stream.size).to eq(6) expect(stream.size).to eq(6)
expect(stream.raw).to eq("123489") expect(stream.raw).to eq("123489")
end end
it 'appends in binary mode' do
'😺'.force_encoding('ASCII-8BIT').each_char.with_index do |byte, offset|
stream.append(byte, offset)
end
stream.seek(0)
expect(stream.size).to eq(4)
expect(stream.raw).to eq('😺')
end
end end
describe '#set' do describe '#set' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment