diff --git a/lib/file_store/s3_store.rb b/lib/file_store/s3_store.rb
index 1c9f7e56ab..2e63681821 100644
--- a/lib/file_store/s3_store.rb
+++ b/lib/file_store/s3_store.rb
@@ -158,8 +158,11 @@ module FileStore
end
return false if SiteSetting.Upload.s3_cdn_url.blank?
- cdn_hostname = URI.parse(SiteSetting.Upload.s3_cdn_url || "").hostname
- return true if cdn_hostname.presence && url[cdn_hostname]
+
+ s3_cdn_url = URI.parse(SiteSetting.Upload.s3_cdn_url || "")
+ cdn_hostname = s3_cdn_url.hostname
+
+ return true if cdn_hostname.presence && url[cdn_hostname] && (s3_cdn_url.path.blank? || parsed_url.path.starts_with?(s3_cdn_url.path))
false
end
diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb
index 5c5eb12a2d..879eca29e1 100644
--- a/spec/models/post_spec.rb
+++ b/spec/models/post_spec.rb
@@ -1715,6 +1715,17 @@ describe Post do
post.each_upload_url { |src, _, _| urls << src }
expect(urls).to be_empty
end
+
+ it "skip S3 cdn urls with different path" do
+ setup_s3
+ SiteSetting.Upload.stubs(:s3_cdn_url).returns("https://cdn.example.com/site1")
+
+ urls = []
+ raw = "
"
+ post = Fabricate(:post, raw: raw)
+ post.each_upload_url { |src, _, _| urls << src }
+ expect(urls).to contain_exactly("https://cdn.example.com/site1/original/1X/bc68acbc8c022726e69f980e00d6811212r.jpg")
+ end
end
describe "#publish_changes_to_client!" do