summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2016-05-02 18:15:25 +0200
committerYorick Peterse <yorickpeterse@gmail.com>2016-05-26 13:58:01 +0200
commit309ca405fa30e1eeaeaeddc0c8918e65c98ebbf7 (patch)
tree914eedab813d679087ba1c008f91b98577bcb42a
parentf2caad2467f318ec1359ee9b03509e831cde9d16 (diff)
downloadgitlab-ce-309ca405fa30e1eeaeaeddc0c8918e65c98ebbf7.tar.gz
Don't modify arguments in CommitRange#initialize
This method used to call strip! on input strings which will mess with the strings if they're re-used or frozen.
-rw-r--r--app/models/commit_range.rb2
-rw-r--r--spec/models/commit_range_spec.rb10
2 files changed, 11 insertions, 1 deletions
diff --git a/app/models/commit_range.rb b/app/models/commit_range.rb
index 51673897d98..4066958f67c 100644
--- a/app/models/commit_range.rb
+++ b/app/models/commit_range.rb
@@ -62,7 +62,7 @@ class CommitRange
def initialize(range_string, project)
@project = project
- range_string.strip!
+ range_string = range_string.strip
unless range_string =~ /\A#{PATTERN}\z/
raise ArgumentError, "invalid CommitRange string format: #{range_string}"
diff --git a/spec/models/commit_range_spec.rb b/spec/models/commit_range_spec.rb
index 9307d97e214..1cf51d8bab3 100644
--- a/spec/models/commit_range_spec.rb
+++ b/spec/models/commit_range_spec.rb
@@ -24,6 +24,16 @@ describe CommitRange, models: true do
expect { described_class.new("Foo", project) }.to raise_error(ArgumentError)
end
+ describe '#initialize' do
+ it 'does not modify strings in-place' do
+ input = "#{sha_from}...#{sha_to} "
+
+ described_class.new(input, project)
+
+ expect(input).to eq("#{sha_from}...#{sha_to} ")
+ end
+ end
+
describe '#to_s' do
it 'is correct for three-dot syntax' do
expect(range.to_s).to eq "#{full_sha_from}...#{full_sha_to}"