Fix character escaping test for Pleroma.Upload
This commit is contained in:
parent
0a8423fdf7
commit
80db6f1328
4 changed files with 40 additions and 20 deletions
|
|
@ -174,10 +174,14 @@ defmodule Pleroma.HTTP do
|
||||||
|
|
||||||
path
|
path
|
||||||
|> URI.encode(fn byte ->
|
|> URI.encode(fn byte ->
|
||||||
URI.char_unreserved?(byte) || Enum.any?(
|
URI.char_unreserved?(byte) ||
|
||||||
Pleroma.Constants.uri_path_allowed_reserved_chars, fn char ->
|
Enum.any?(
|
||||||
char == byte end)
|
Pleroma.Constants.uri_path_allowed_reserved_chars(),
|
||||||
end)
|
fn char ->
|
||||||
|
char == byte
|
||||||
|
end
|
||||||
|
)
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp encode_query(nil), do: nil
|
defp encode_query(nil), do: nil
|
||||||
|
|
|
||||||
|
|
@ -107,4 +107,24 @@ defmodule Pleroma.HTTPTest do
|
||||||
|
|
||||||
assert result.status == 200
|
assert result.status == 200
|
||||||
end
|
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
|
end
|
||||||
|
|
|
||||||
|
|
@ -404,24 +404,20 @@ defmodule Pleroma.ReverseProxyTest do
|
||||||
ClientMock
|
ClientMock
|
||||||
|> expect(:request, fn
|
|> expect(:request, fn
|
||||||
:get,
|
:get,
|
||||||
"https://example.com/emoji/Pack%201/koronebless.png?foo=bar+baz",
|
"https://example.com/emoji/Pack%201/koronebless.png?foo=bar+baz",
|
||||||
_headers,
|
_headers,
|
||||||
_body,
|
_body,
|
||||||
_opts ->
|
_opts ->
|
||||||
{:ok, 200, [{"content-type", "image/png"}], "It works!"}
|
{:ok, 200, [{"content-type", "image/png"}], "It works!"}
|
||||||
|
|
||||||
:get,
|
:get,
|
||||||
"https://example.com/media/foo/bar%20!$&'()*+,;=/:%20@a%20%5Bbaz%5D.mp4",
|
"https://example.com/media/foo/bar%20!$&'()*+,;=/:%20@a%20%5Bbaz%5D.mp4",
|
||||||
_headers,
|
_headers,
|
||||||
_body,
|
_body,
|
||||||
_opts ->
|
_opts ->
|
||||||
{:ok, 200, [{"content-type", "video/mp4"}], "Allowed reserved chars."}
|
{:ok, 200, [{"content-type", "video/mp4"}], "Allowed reserved chars."}
|
||||||
|
|
||||||
:get,
|
:get, "https://example.com/media/unicode%20%F0%9F%99%82%20.gif", _headers, _body, _opts ->
|
||||||
"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"}
|
{:ok, 200, [{"content-type", "image/gif"}], "Unicode emoji in path"}
|
||||||
end)
|
end)
|
||||||
|> stub(:stream_body, fn _ -> :done end)
|
|> stub(:stream_body, fn _ -> :done end)
|
||||||
|
|
|
||||||
|
|
@ -227,20 +227,20 @@ defmodule Pleroma.UploadTest do
|
||||||
assert Path.basename(attachment_url["href"]) == "an%E2%80%A6%20image.jpg"
|
assert Path.basename(attachment_url["href"]) == "an%E2%80%A6%20image.jpg"
|
||||||
end
|
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.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg")
|
||||||
|
|
||||||
file = %Plug.Upload{
|
file = %Plug.Upload{
|
||||||
content_type: "image/jpeg",
|
content_type: "image/jpeg",
|
||||||
path: Path.absname("test/fixtures/image_tmp.jpg"),
|
path: Path.absname("test/fixtures/image_tmp.jpg"),
|
||||||
filename: ":?#[]@!$&\\'()*+,;=.jpg"
|
filename: ":?#[]@!$&'()*+,;=.jpg"
|
||||||
}
|
}
|
||||||
|
|
||||||
{:ok, data} = Upload.store(file)
|
{:ok, data} = Upload.store(file)
|
||||||
[attachment_url | _] = data["url"]
|
[attachment_url | _] = data["url"]
|
||||||
|
|
||||||
assert Path.basename(attachment_url["href"]) ==
|
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
|
end
|
||||||
|
|
||||||
test "double %-encodes filename" do
|
test "double %-encodes filename" do
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue