Page MenuHomePhorge

No OneTemporary

Authored By
Unknown
Size
2 KB
Referenced Files
None
Subscribers
None
diff --git a/changelog.d/media-proxy-data-urls.fix b/changelog.d/media-proxy-data-urls.fix
new file mode 100644
index 000000000..a83b8ef29
--- /dev/null
+++ b/changelog.d/media-proxy-data-urls.fix
@@ -0,0 +1 @@
+MediaProxy: Do not proxy data: URLs
diff --git a/lib/pleroma/web/media_proxy.ex b/lib/pleroma/web/media_proxy.ex
index 82a070767..a318ab10f 100644
--- a/lib/pleroma/web/media_proxy.ex
+++ b/lib/pleroma/web/media_proxy.ex
@@ -45,7 +45,7 @@ defmodule Pleroma.Web.MediaProxy do
def url("/" <> _ = url), do: url
def url(url) do
- if enabled?() and url_proxiable?(url) do
+ if enabled?() and not data_url?(url) and url_proxiable?(url) do
encode_url(url)
else
url
@@ -61,7 +61,7 @@ defmodule Pleroma.Web.MediaProxy do
def preview_url("//" <> _ = url, pparams), do: preview_url("https:" <> url, pparams)
def preview_url(url, preview_params) do
- if preview_enabled?() do
+ if preview_enabled?() and not data_url?(url) do
encode_preview_url(url, preview_params)
else
url(url)
@@ -74,6 +74,8 @@ defmodule Pleroma.Web.MediaProxy do
# non-local non-whitelisted URLs through it and be sure that body size constraint is preserved.
def preview_enabled?, do: enabled?() and !!Config.get([:media_preview_proxy, :enabled])
+ defp data_url?(url), do: url |> String.slice(0, 5) |> String.downcase() == "data:"
+
def local?(url), do: String.starts_with?(url, Endpoint.url())
def whitelisted?(url) do
diff --git a/test/pleroma/web/media_proxy_test.exs b/test/pleroma/web/media_proxy_test.exs
index ab707a061..433a0fe95 100644
--- a/test/pleroma/web/media_proxy_test.exs
+++ b/test/pleroma/web/media_proxy_test.exs
@@ -45,6 +45,18 @@ defmodule Pleroma.Web.MediaProxyTest do
assert MediaProxy.url(local_root) == local_root
end
+ test "ignores data url" do
+ assert MediaProxy.url("data:image/png;base64,AAAA") == "data:image/png;base64,AAAA"
+ assert MediaProxy.url("DATA:image/png;base64,AAAA") == "DATA:image/png;base64,AAAA"
+ end
+
+ test "preview_url ignores data url" do
+ clear_config([:media_preview_proxy, :enabled], true)
+
+ assert MediaProxy.preview_url("data:image/png;base64,AAAA") ==
+ "data:image/png;base64,AAAA"
+ end
+
test "encodes and decodes URL" do
url = "https://pleroma.soykaf.com/static/logo.png"
encoded = MediaProxy.url(url)

File Metadata

Mime Type
text/x-diff
Expires
Mon, Nov 2, 8:18 AM (12 h, 51 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1803768
Default Alt Text
(2 KB)

Event Timeline