logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://anongit.hacktivis.me/git/pleroma.git/
commit: 80db6f1328212a0b00e26f548f02aa5d6a3c1715
parent 0a8423fdf726e6c1d9d6bf781e14d610bb917ed9
Author: Phantasm <phantasm@centrum.cz>
Date:   Fri, 29 Aug 2025 15:04:02 +0200

Fix character escaping test for Pleroma.Upload

Diffstat:

Mlib/pleroma/http.ex12++++++++----
Mtest/pleroma/http_test.exs20++++++++++++++++++++
Mtest/pleroma/reverse_proxy_test.exs22+++++++++-------------
Mtest/pleroma/upload_test.exs6+++---
4 files changed, 40 insertions(+), 20 deletions(-)

diff --git a/lib/pleroma/http.ex b/lib/pleroma/http.ex @@ -174,10 +174,14 @@ defmodule Pleroma.HTTP do path |> URI.encode(fn byte -> - URI.char_unreserved?(byte) || Enum.any?( - Pleroma.Constants.uri_path_allowed_reserved_chars, fn char -> - char == byte end) - end) + URI.char_unreserved?(byte) || + Enum.any?( + Pleroma.Constants.uri_path_allowed_reserved_chars(), + fn char -> + char == byte + end + ) + end) end defp encode_query(nil), do: nil diff --git a/test/pleroma/http_test.exs b/test/pleroma/http_test.exs @@ -107,4 +107,24 @@ defmodule Pleroma.HTTPTest do assert result.status == 200 end + + test "decodes URL first by default" do + clear_config(:test_url_encoding, true) + + normal_url = "https://example.com/media/file%20with%20space.jpg?name=a+space.jpg" + + result = HTTP.encode_url(normal_url) + + assert result == "https://example.com/media/file%20with%20space.jpg?name=a+space.jpg" + end + + test "doesn't decode URL first when specified" do + clear_config(:test_url_encoding, true) + + normal_url = "https://example.com/media/file%20with%20space.jpg" + + result = HTTP.encode_url(normal_url, bypass_decode: true) + + assert result == "https://example.com/media/file%2520with%2520space.jpg" + end end diff --git a/test/pleroma/reverse_proxy_test.exs b/test/pleroma/reverse_proxy_test.exs @@ -404,24 +404,20 @@ defmodule Pleroma.ReverseProxyTest do ClientMock |> expect(:request, fn :get, - "https://example.com/emoji/Pack%201/koronebless.png?foo=bar+baz", - _headers, - _body, - _opts -> + "https://example.com/emoji/Pack%201/koronebless.png?foo=bar+baz", + _headers, + _body, + _opts -> {:ok, 200, [{"content-type", "image/png"}], "It works!"} :get, - "https://example.com/media/foo/bar%20!$&'()*+,;=/:%20@a%20%5Bbaz%5D.mp4", - _headers, - _body, - _opts -> + "https://example.com/media/foo/bar%20!$&'()*+,;=/:%20@a%20%5Bbaz%5D.mp4", + _headers, + _body, + _opts -> {:ok, 200, [{"content-type", "video/mp4"}], "Allowed reserved chars."} - :get, - "https://example.com/media/unicode%20%F0%9F%99%82%20.gif", - _headers, - _body, - _opts -> + :get, "https://example.com/media/unicode%20%F0%9F%99%82%20.gif", _headers, _body, _opts -> {:ok, 200, [{"content-type", "image/gif"}], "Unicode emoji in path"} end) |> stub(:stream_body, fn _ -> :done end) diff --git a/test/pleroma/upload_test.exs b/test/pleroma/upload_test.exs @@ -227,20 +227,20 @@ defmodule Pleroma.UploadTest do assert Path.basename(attachment_url["href"]) == "an%E2%80%A6%20image.jpg" end - test "escapes reserved uri characters" do + test "escapes disallowed reserved characters in uri path" do File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg") file = %Plug.Upload{ content_type: "image/jpeg", path: Path.absname("test/fixtures/image_tmp.jpg"), - filename: ":?#[]@!$&\\'()*+,;=.jpg" + filename: ":?#[]@!$&'()*+,;=.jpg" } {:ok, data} = Upload.store(file) [attachment_url | _] = data["url"] assert Path.basename(attachment_url["href"]) == - "%3A%3F%23%5B%5D%40%21%24%26%5C%27%28%29%2A%2B%2C%3B%3D.jpg" + ":%3F%23%5B%5D@!$&'()*+,;=.jpg" end test "double %-encodes filename" do