Commit b07da07c authored by Lin Jen-Shin's avatar Lin Jen-Shin

Just enforce the output encoding for Ansi2html

Fixes https://sentry.gitlap.com/gitlab/gitlabcom/issues/27545/
parent ec9f6180
...@@ -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 if @stream
@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,10 +71,18 @@ describe Gitlab::Ci::Trace::Stream do ...@@ -71,10 +71,18 @@ 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
after do
tempfile.unlink
end end
it "truncates and append content" do it "truncates and append content" do
...@@ -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