summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus G Thiel <linus@yesbabyyes.se>2016-10-05 18:13:49 +0200
committerLinus G Thiel <linus@yesbabyyes.se>2016-10-05 18:13:49 +0200
commit4d20083bd7e8839bfef64267535fd3c947a3b374 (patch)
tree12f7da1b344d0dd900005387023bb0dfe9395f43
parent00f002edf2f80266550d58d6233de2d07f5248ca (diff)
downloadgitlab-ce-4d20083bd7e8839bfef64267535fd3c947a3b374.tar.gz
Respond with 404 Not Found for non-existent tags
Non-existent tags should be handled with 404 Not Found.
-rw-r--r--CHANGELOG1
-rw-r--r--app/controllers/projects/tags_controller.rb2
-rw-r--r--spec/controllers/projects/tags_controller_spec.rb14
3 files changed, 17 insertions, 0 deletions
diff --git a/CHANGELOG b/CHANGELOG
index e410d73d1f6..ea54f37a22e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
Please view this file on the master branch, on stable branches it's out of date.
v 8.12.0 (unreleased)
+ - Respond with 404 Not Found for non-existent tags
- Update the rouge gem to 2.0.6, which adds highlighting support for JSX, Prometheus, and others. !6251
- Only check :can_resolve permission if the note is resolvable
- Add ability to fork to a specific namespace using API. (ritave)
diff --git a/app/controllers/projects/tags_controller.rb b/app/controllers/projects/tags_controller.rb
index 6ea8ee62bc5..40899abf6ee 100644
--- a/app/controllers/projects/tags_controller.rb
+++ b/app/controllers/projects/tags_controller.rb
@@ -20,6 +20,8 @@ class Projects::TagsController < Projects::ApplicationController
def show
@tag = @repository.find_tag(params[:id])
+ return render_404 if @tag.nil?
+
@release = @project.releases.find_or_initialize_by(tag: @tag.name)
@commit = @repository.commit(@tag.target)
end
diff --git a/spec/controllers/projects/tags_controller_spec.rb b/spec/controllers/projects/tags_controller_spec.rb
index a6995145cc1..5e661c2c41d 100644
--- a/spec/controllers/projects/tags_controller_spec.rb
+++ b/spec/controllers/projects/tags_controller_spec.rb
@@ -17,4 +17,18 @@ describe Projects::TagsController do
expect(assigns(:releases)).not_to include(invalid_release)
end
end
+
+ describe 'GET show' do
+ before { get :show, namespace_id: project.namespace.to_param, project_id: project.to_param, id: id }
+
+ context "valid tag" do
+ let(:id) { 'v1.0.0' }
+ it { is_expected.to respond_with(:success) }
+ end
+
+ context "invalid tag" do
+ let(:id) { 'latest' }
+ it { is_expected.to respond_with(:not_found) }
+ end
+ end
end