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 /app/models/merge_request_diff_file.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 'app/models/merge_request_diff_file.rb')
-rw-r--r-- | app/models/merge_request_diff_file.rb | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/app/models/merge_request_diff_file.rb b/app/models/merge_request_diff_file.rb index 598ebd4d829..1199ff5af22 100644 --- a/app/models/merge_request_diff_file.rb +++ b/app/models/merge_request_diff_file.rb @@ -8,4 +8,14 @@ class MergeRequestDiffFile < ActiveRecord::Base encode_utf8(diff) if diff.respond_to?(:encoding) end + + def diff + binary? ? super.unpack('m0').first : super + end + + def to_hash + keys = Gitlab::Git::Diff::SERIALIZE_KEYS - [:diff] + + as_json(only: keys).merge(diff: diff).with_indifferent_access + end end |