commit: 004ea90b29fec5e7b7b53b40f6acb6455a2340db
parent 9445ab9096b7a69200e3c1f8bdb3befdc019a6e9
Author: Phantasm <phantasm@centrum.cz>
Date: Tue, 23 Sep 2025 22:55:54 +0200
MediaProxy: Fix 424 caused by inconsistent %-encoding from remote instances
Notably this would fail to redirect to original proxied file when
preview generation criteria haven't been met.
Diffstat:
1 file changed, 8 insertions(+), 0 deletions(-)
diff --git a/lib/pleroma/web/media_proxy.ex b/lib/pleroma/web/media_proxy.ex
@@ -5,6 +5,7 @@
defmodule Pleroma.Web.MediaProxy do
alias Pleroma.Config
alias Pleroma.Helpers.UriHelper
+ alias Pleroma.HTTP
alias Pleroma.Upload
alias Pleroma.Web.Endpoint
alias Pleroma.Web.MediaProxy.Invalidation
@@ -99,13 +100,20 @@ defmodule Pleroma.Web.MediaProxy do
{base64, sig64}
end
+ # The URL coming into MediaProxy from the outside might have wrong %-encoding
+ # (like older Pleroma versions)
+ # This would cause an inconsistency with the encoded URL here and the requested
+ # URL fixed with Pleroma.Tesla.Middleware.EncodeUrl.
+ # End result is a failing HEAD request in Pleroma.Web.MediaProxy.MediaProxyController.handle_preview/2
def encode_url(url) do
+ url = HTTP.encode_url(url)
{base64, sig64} = base64_sig64(url)
build_url(sig64, base64, filename(url))
end
def encode_preview_url(url, preview_params \\ []) do
+ url = HTTP.encode_url(url)
{base64, sig64} = base64_sig64(url)
build_preview_url(sig64, base64, filename(url), preview_params)