Skip to content

Commit 333af6c

Browse files
authored
Merge pull request #6367 from rubygems/do-not-push-gem-reserved-versions
Disallow pusher to push versions of a reserved gem
2 parents 37b5138 + 8bc9f5d commit 333af6c

3 files changed

Lines changed: 16 additions & 3 deletions

File tree

app/models/pusher.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ def republish_notification(version)
256256
end
257257

258258
def notify_unauthorized
259-
if !api_key.user?
259+
if !api_key.user? || rubygem.reserved_name?
260260
notify("You are not allowed to push this gem.", 403)
261261
elsif rubygem.unconfirmed_ownership?(owner)
262262
notify("You do not have permission to push to this gem. " \

app/models/rubygem.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,11 @@ def slug
291291
end
292292

293293
def pushable?
294-
new_record? || (versions.indexed.none? && not_protected?)
294+
new_record? || (versions.indexed.none? && not_protected? && !reserved_name?)
295+
end
296+
297+
def reserved_name?
298+
GemNameReservation.reserved?(name)
295299
end
296300

297301
def create_ownership(user)
@@ -400,7 +404,7 @@ def needs_name_validation?
400404
end
401405

402406
def reserved_names_exclusion
403-
return unless GemNameReservation.reserved?(name)
407+
return unless reserved_name?
404408
errors.add :name, "'#{name}' is a reserved gem name."
405409
end
406410

test/models/pusher_test.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,15 @@ class PusherTest < ActiveSupport::TestCase
343343
assert @cutter.authorize
344344
end
345345

346+
should "be false if gem name is reserved" do
347+
create(:version, rubygem: @rubygem, number: "0.1.1", indexed: false)
348+
create(:gem_name_reservation, name: @rubygem.name.downcase)
349+
350+
refute @cutter.authorize
351+
assert_equal "You are not allowed to push this gem.", @cutter.message
352+
assert_equal 403, @cutter.code
353+
end
354+
346355
context "version metadata has rubygems_mfa_required set" do
347356
setup do
348357
spec = mock

0 commit comments

Comments
 (0)