FIX: Crazy large ids should not raise exceptions

This commit is contained in:
Robin Ward 2016-03-23 12:13:29 -04:00
parent bba0393c87
commit 4180e207c3
2 changed files with 15 additions and 1 deletions

View file

@ -100,7 +100,16 @@ class ApplicationController < ActionController::Base
class PluginDisabled < StandardError; end
rescue_from Discourse::NotFound, PluginDisabled do
# Handles requests for giant IDs that throw pg exceptions
rescue_from RangeError do |e|
if e.message =~ /ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer/
rescue_discourse_actions(:not_found, 404)
else
raise e
end
end
rescue_from Discourse::NotFound, PluginDisabled do
rescue_discourse_actions(:not_found, 404)
end

View file

@ -578,6 +578,11 @@ describe TopicsController do
expect(response.status).to eq(404)
end
it 'returns a 404 for an ID that is larger than postgres limits' do
xhr :get, :show, topic_id: 50142173232201640412, slug: 'topic-that-is-made-up'
expect(response.status).to eq(404)
end
context 'a topic with nil slug exists' do
before do
@nil_slug_topic = Fabricate(:topic)