Just enforce the output encoding for Ansi2html

Fixes https://sentry.gitlap.com/gitlab/gitlabcom/issues/27545/
This commit is contained in:
Lin Jen-Shin 2017-04-18 17:03:02 +08:00
parent ec9f6180bc
commit b07da07c82
3 changed files with 24 additions and 12 deletions

View file

@ -172,7 +172,7 @@ module Ci
close_open_tags()
OpenStruct.new(
html: @out,
html: @out.force_encoding(Encoding.default_external),
state: state,
append: append,
truncated: truncated,

View file

@ -14,14 +14,7 @@ module Gitlab
def initialize
@stream = yield
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
@stream.binmode if @stream
end
def valid?
@ -68,8 +61,8 @@ module Gitlab
def html(last_lines: nil)
text = raw(last_lines: last_lines)
stream = StringIO.new(text)
::Ci::Ansi2html.convert(stream).html
buffer = StringIO.new(text)
::Ci::Ansi2html.convert(buffer).html
end
def extract_coverage(regex)

View file

@ -71,12 +71,20 @@ describe Gitlab::Ci::Trace::Stream do
end
describe '#append' do
let(:tempfile) { Tempfile.new }
let(:stream) do
described_class.new do
StringIO.new("12345678")
tempfile.write("12345678")
tempfile.rewind
tempfile
end
end
after do
tempfile.unlink
end
it "truncates and append content" do
stream.append("89", 4)
stream.seek(0)
@ -84,6 +92,17 @@ describe Gitlab::Ci::Trace::Stream do
expect(stream.size).to eq(6)
expect(stream.raw).to eq("123489")
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
describe '#set' do