diff options
author | Sean McGivern <sean@gitlab.com> | 2017-07-25 17:57:02 +0100 |
---|---|---|
committer | Sean McGivern <sean@gitlab.com> | 2017-07-26 15:34:57 +0100 |
commit | 396b8f91ec47ffb5a02ebf6d713ef4cbf04f1f94 (patch) | |
tree | c27074b1608622faa29efb8275be983a9331b2db /spec/models/merge_request_diff_file_spec.rb | |
parent | 0c563225b663742b4f26731dc7bc822a38f7289b (diff) | |
download | gitlab-ce-396b8f91ec47ffb5a02ebf6d713ef4cbf04f1f94.tar.gz |
Fix saving diffs that are not valid UTF-835539-can-t-create-a-merge-request-containing-a-binary-file-with-non-utf-8-characters
Previously, we used Psych, which would:
1. Check if a string was encoded as binary, and not ASCII-compatible.
2. Add the !binary tag in that case.
3. Convert to base64.
We need to do the same thing, using a new column in place of the tag.
Diffstat (limited to 'spec/models/merge_request_diff_file_spec.rb')
-rw-r--r-- | spec/models/merge_request_diff_file_spec.rb | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/spec/models/merge_request_diff_file_spec.rb b/spec/models/merge_request_diff_file_spec.rb index 7276f5b5061..239620ef4fc 100644 --- a/spec/models/merge_request_diff_file_spec.rb +++ b/spec/models/merge_request_diff_file_spec.rb @@ -1,8 +1,33 @@ require 'rails_helper' describe MergeRequestDiffFile, type: :model do + describe '#diff' do + let(:unpacked) { 'unpacked' } + let(:packed) { [unpacked].pack('m0') } + + before do + subject.diff = packed + end + + context 'when the diff is marked as binary' do + before do + subject.binary = true + end + + it 'unpacks from base 64' do + expect(subject.diff).to eq(unpacked) + end + end + + context 'when the diff is not marked as binary' do + it 'returns the raw diff' do + expect(subject.diff).to eq(packed) + end + end + end + describe '#utf8_diff' do - it 'does not raise error when a hash value is in binary' do + it 'does not raise error when the diff is binary' do subject.diff = "\x05\x00\x68\x65\x6c\x6c\x6f" expect { subject.utf8_diff }.not_to raise_error |