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,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