From 2c56e447ed468437d30871685389971d485f951d Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sat, 3 Nov 2018 19:44:00 +0100 Subject: [PATCH] Ignore invalid URLs for camo When people only write `https://` as image URL, this would fail with `Addressable::URI::InvalidURIError: Absolute URI missing hierarchical segment: 'https://'`. closes #7922 --- Changelog.md | 3 +-- lib/diaspora/camo.rb | 6 +++++- spec/lib/diaspora/camo_spec.rb | 4 ++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Changelog.md b/Changelog.md index d579834b5..7f0d57851 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,15 +1,14 @@ # 0.7.8.0 ## Refactor - * Make setting up a development environment 9001% easier by adding a Docker-based setup [#7870](https://github.com/diaspora/diaspora/pull/7870) * Improve `web+diaspora://` handler description [#7909](https://github.com/diaspora/diaspora/pull/7909) * Move comment timestamp next to author name [#7905](https://github.com/diaspora/diaspora/pull/7905) ## Bug fixes +* Ignore invalid URLs for camo [#7922](https://github.com/diaspora/diaspora/pull/7922) ## Features - * Add the ability to assign roles in the admin panel [#7868](https://github.com/diaspora/diaspora/pull/7868) * Improve memory usage with libjemalloc if available [#7919](https://github.com/diaspora/diaspora/pull/7919) diff --git a/lib/diaspora/camo.rb b/lib/diaspora/camo.rb index b7c0d78b3..3fa519f01 100644 --- a/lib/diaspora/camo.rb +++ b/lib/diaspora/camo.rb @@ -17,7 +17,11 @@ module Diaspora return unless url return url unless self.url_eligible?(url) - url = Addressable::URI.encode(Addressable::URI.unencode(url)) + begin + url = Addressable::URI.encode(Addressable::URI.unencode(url)) + rescue Addressable::URI::InvalidURIError + return url + end digest = OpenSSL::HMAC.hexdigest( OpenSSL::Digest.new('sha1'), diff --git a/spec/lib/diaspora/camo_spec.rb b/spec/lib/diaspora/camo_spec.rb index 58df5bead..faea22987 100644 --- a/spec/lib/diaspora/camo_spec.rb +++ b/spec/lib/diaspora/camo_spec.rb @@ -48,6 +48,10 @@ describe Diaspora::Camo do expect(Diaspora::Camo.image_url("https://example.com/%C3%A1%C3%A9%C3%B3?foo=%C3%A4%C3%BC%C3%B6&bar=a%CC%80")) .to eq(camo_image_url) end + + it "ignores invalid urls" do + expect(Diaspora::Camo.image_url("https://")).to eq("https://") + end end end