From e73fbfe2659426a93a5eeeb85db5e740612363c9 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Mon, 4 Dec 2017 10:00:07 +0800 Subject: [PATCH] FIX: `Topic#featured_link_root_domain` extracts URL before parsing. --- app/controllers/posts_controller.rb | 1 - app/models/topic.rb | 9 ++++++++- spec/models/topic_spec.rb | 14 ++++++++------ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 45464246066..c3498899a14 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -133,7 +133,6 @@ class PostsController < ApplicationController end def create - @manager_params = create_params @manager_params[:first_post_checks] = !is_api? diff --git a/app/models/topic.rb b/app/models/topic.rb index e3f6aa4c116..0476035f1ac 100644 --- a/app/models/topic.rb +++ b/app/models/topic.rb @@ -1267,7 +1267,14 @@ SQL end def featured_link_root_domain - MiniSuffix.domain(URI.parse(self.featured_link).hostname) + url = URI.extract(self.featured_link).first + + begin + MiniSuffix.domain(URI.parse(url).hostname) + rescue URI::InvalidURIError => e + Rails.logger.warn("#{e.message}: #{e.backtrace.join("\n")}") + nil + end end private diff --git a/spec/models/topic_spec.rb b/spec/models/topic_spec.rb index 11686a14ee5..96a5716ac3d 100644 --- a/spec/models/topic_spec.rb +++ b/spec/models/topic_spec.rb @@ -2099,12 +2099,14 @@ describe Topic do describe '#featured_link_root_domain' do let(:topic) { Fabricate.build(:topic) } - it 'should extract the root domain correctly' do - [ - "https://meta.discourse.org", - "https://meta.discourse.org/", - "https://meta.discourse.org/?filter=test" - ].each do |featured_link| + [ + "https://meta.discourse.org", + "https://meta.discourse.org/", + "https://meta.discourse.org/?filter=test", + "https://meta.discourse.org/ there might be text", + "http://meta.discourse.org/\u0441", + ].each do |featured_link| + it "should extract the root domain from #{featured_link} correctly" do topic.featured_link = featured_link expect(topic.featured_link_root_domain).to eq("discourse.org") end