diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb index 67c4ee54d36..d5c086d2ae2 100644 --- a/app/controllers/tags_controller.rb +++ b/app/controllers/tags_controller.rb @@ -277,10 +277,14 @@ class TagsController < ::ApplicationController def construct_url_with(action, opts) method = url_method(opts) - url = if action == :prev - public_send(method, opts.merge(prev_page_params(opts))) - else # :next - public_send(method, opts.merge(next_page_params(opts))) + begin + url = if action == :prev + public_send(method, opts.merge(prev_page_params(opts))) + else # :next + public_send(method, opts.merge(next_page_params(opts))) + end + rescue + raise Discourse::NotFound end url.sub('.json?', '?') end diff --git a/spec/requests/tags_controller_spec.rb b/spec/requests/tags_controller_spec.rb index 13a991ad8d3..65165852a98 100644 --- a/spec/requests/tags_controller_spec.rb +++ b/spec/requests/tags_controller_spec.rb @@ -50,6 +50,22 @@ describe TagsController do end end + describe '#show' do + before do + Fabricate(:tag, name: 'test') + end + + it "should return the right response" do + get "/tags/test" + expect(response).to be_success + end + + it "should handle invalid tags" do + get "/tags/%2ftest%2f" + expect(response.status).to eq(404) + end + end + describe '#check_hashtag' do let(:tag) { Fabricate(:tag, name: 'test') }