Fix crash when autolinking an invalid URI in Markdown

This commit is contained in:
Thibaut Girka 2020-10-13 12:47:38 +02:00 committed by ThibG
parent cd861c051c
commit 311f457430
2 changed files with 16 additions and 2 deletions

View File

@ -11,6 +11,8 @@ class HTMLRenderer < Redcarpet::Render::HTML
def autolink(link, link_type) def autolink(link, link_type)
return link if link_type == :email return link if link_type == :email
Formatter.instance.link_url(link) Formatter.instance.link_url(link)
rescue Addressable::URI::InvalidURIError, IDN::Idna::IdnaError
encode(link)
end end
private private

View File

@ -336,11 +336,22 @@ RSpec.describe Formatter do
end end
context do context do
let(:content_type) { 'text/plain' }
subject do subject do
status = Fabricate(:status, text: text, uri: nil) status = Fabricate(:status, text: text, content_type: content_type, uri: nil)
Formatter.instance.format(status) Formatter.instance.format(status)
end end
context 'given an invalid URL (invalid port)' do
let(:text) { 'https://foo.bar:X/' }
let(:content_type) { 'text/markdown' }
it 'outputs the raw URL' do
is_expected.to eq '<p>https://foo.bar:X/</p>'
end
end
include_examples 'encode and link URLs' include_examples 'encode and link URLs'
end end
@ -464,7 +475,8 @@ RSpec.describe Formatter do
subject { Formatter.instance.plaintext(status) } subject { Formatter.instance.plaintext(status) }
context 'given a post with local status' do context 'given a post with local status' do
let(:status) { Fabricate(:status, text: '<p>a text by a nerd who uses an HTML tag in text</p>', uri: nil) } let(:status) { Fabricate(:status, text: '<p>a text by a nerd who uses an HTML tag in text</p>', content_type: content_type, uri: nil) }
let(:content_type) { 'text/plain' }
it 'returns the raw text' do it 'returns the raw text' do
is_expected.to eq '<p>a text by a nerd who uses an HTML tag in text</p>' is_expected.to eq '<p>a text by a nerd who uses an HTML tag in text</p>'