From c6f783c5519cc2cd519be4406366ecbad57a8c40 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 31 Jan 2024 11:01:37 -0500 Subject: [PATCH 01/15] Pleroma.Web.ControllerHelper: fix @spec to resolve dialyzer errors lib/pleroma/web/admin_api/controllers/user_controller.ex:333:no_return Function index/2 has no local return. ________________________________________________________________________________ lib/pleroma/web/admin_api/controllers/user_controller.ex:357:unused_fun Function maybe_parse_filters/1 will never be called. ________________________________________________________________________________ lib/pleroma/web/admin_api/controllers/user_controller.ex:366:no_return Function page_params/1 has no local return. ________________________________________________________________________________ lib/pleroma/web/admin_api/controllers/user_controller.ex:368:call The function call will not succeed. Pleroma.Web.ControllerHelper.fetch_integer_param(_params :: any(), :page, 1) breaks the contract (map(), String.t(), integer() | nil) :: integer() | nil --- lib/pleroma/web/controller_helper.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/controller_helper.ex b/lib/pleroma/web/controller_helper.ex index d3cf372dc..1caf0f7e6 100644 --- a/lib/pleroma/web/controller_helper.ex +++ b/lib/pleroma/web/controller_helper.ex @@ -20,7 +20,7 @@ defmodule Pleroma.Web.ControllerHelper do |> json(json) end - @spec fetch_integer_param(map(), String.t(), integer() | nil) :: integer() | nil + @spec fetch_integer_param(map(), String.t() | atom(), integer() | nil) :: integer() | nil def fetch_integer_param(params, name, default \\ nil) do params |> Map.get(name, default) From ed2f8e45e9118177727b22f103f3c20476a891cf Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 31 Jan 2024 11:12:41 -0500 Subject: [PATCH 02/15] Pleroma.Web.MastodonAPI.SearchController: fix dialyzer errors Add a separate Pagination.paginate_list/2 function instead of overloading paginate/4 and complicating its matching and @spec --- lib/pleroma/pagination.ex | 9 +++++---- .../web/mastodon_api/controllers/search_controller.ex | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/pleroma/pagination.ex b/lib/pleroma/pagination.ex index f12ca2819..8db732cc9 100644 --- a/lib/pleroma/pagination.ex +++ b/lib/pleroma/pagination.ex @@ -61,15 +61,16 @@ defmodule Pleroma.Pagination do |> Repo.all() end - @spec paginate(Ecto.Query.t(), map(), type(), atom() | nil) :: [Ecto.Schema.t()] - def paginate(query, options, method \\ :keyset, table_binding \\ nil) - - def paginate(list, options, _method, _table_binding) when is_list(list) do + @spec paginate_list(list(), keyword()) :: list() + def paginate_list(list, options) do offset = options[:offset] || 0 limit = options[:limit] || 0 Enum.slice(list, offset, limit) end + @spec paginate(Ecto.Query.t(), map(), type(), atom() | nil) :: [Ecto.Schema.t()] + def paginate(query, options, method \\ :keyset, table_binding \\ nil) + def paginate(query, options, :keyset, table_binding) do query |> restrict(:min_id, options, table_binding) diff --git a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex index 7fdf684d2..628aa311b 100644 --- a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex @@ -156,7 +156,7 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do tags end - Pleroma.Pagination.paginate(tags, options) + Pleroma.Pagination.paginate_list(tags, options) end defp add_joined_tag(tags) do From 5e8bedcca0ebac6fc92733c4e3a95842c850165b Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 31 Jan 2024 11:15:48 -0500 Subject: [PATCH 03/15] Pleroma.Web.PleromaAPI.MascotController: fix dialyzer error due to bad error match lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:37:pattern_match The pattern can never match the type. Pattern: {:content_type, _} Type: {:error, _} ________________________________________________________________________________ lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:40:pattern_match The pattern can never match the type. Pattern: {:upload, {:error, _}} Type: {:error, _} --- lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex b/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex index 5e412196b..3208cde98 100644 --- a/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex @@ -28,7 +28,7 @@ defmodule Pleroma.Web.PleromaAPI.MascotController do _ ) do with {:content_type, "image" <> _} <- {:content_type, file.content_type}, - {:ok, object} <- ActivityPub.upload(file, actor: User.ap_id(user)) do + {_, {:ok, object}} <- {:upload, ActivityPub.upload(file, actor: User.ap_id(user))} do attachment = render_attachment(object) {:ok, _user} = User.mascot_update(user, attachment) From 92992c022d454f9489ce54aa8f6189456435a48a Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 31 Jan 2024 11:29:06 -0500 Subject: [PATCH 04/15] Pleroma.Web.OAuth.OAuthController: dialyzer error validate_scopes/2 can never receive a map as it is only called in one place with a guard requiring a list lib/pleroma/web/o_auth/o_auth_controller.ex:615:guard_fail The guard test: is_map(_params :: maybe_improper_list()) can never succeed. --- lib/pleroma/web/o_auth/o_auth_controller.ex | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/pleroma/web/o_auth/o_auth_controller.ex b/lib/pleroma/web/o_auth/o_auth_controller.ex index 2bbe5d5fa..47b03215f 100644 --- a/lib/pleroma/web/o_auth/o_auth_controller.ex +++ b/lib/pleroma/web/o_auth/o_auth_controller.ex @@ -610,13 +610,8 @@ defmodule Pleroma.Web.OAuth.OAuthController do end end - @spec validate_scopes(App.t(), map() | list()) :: + @spec validate_scopes(App.t(), list()) :: {:ok, list()} | {:error, :missing_scopes | :unsupported_scopes} - defp validate_scopes(%App{} = app, params) when is_map(params) do - requested_scopes = Scopes.fetch_scopes(params, app.scopes) - validate_scopes(app, requested_scopes) - end - defp validate_scopes(%App{} = app, requested_scopes) when is_list(requested_scopes) do Scopes.validate(requested_scopes, app.scopes) end From 97c4d3bcc987b6e60c09ab6e2911661cf43051c3 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 31 Jan 2024 13:12:56 -0500 Subject: [PATCH 05/15] Pleroma.Web.Plugs.RateLimiter.Supervisor: dialyzer error lib/pleroma/web/plugs/rate_limiter/supervisor.ex:12:no_return Function init/1 has no local return. --- lib/pleroma/web/plugs/rate_limiter/supervisor.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/web/plugs/rate_limiter/supervisor.ex b/lib/pleroma/web/plugs/rate_limiter/supervisor.ex index f00f3d95e..5f79a3e3e 100644 --- a/lib/pleroma/web/plugs/rate_limiter/supervisor.ex +++ b/lib/pleroma/web/plugs/rate_limiter/supervisor.ex @@ -14,7 +14,7 @@ defmodule Pleroma.Web.Plugs.RateLimiter.Supervisor do Pleroma.Web.Plugs.RateLimiter.LimiterSupervisor ] - opts = [strategy: :one_for_one, name: Pleroma.Web.Streamer.Supervisor] + opts = [strategy: :one_for_one] Supervisor.init(children, opts) end end From 518a38577b6bf3fdf04036e697d81f98009bbec9 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 31 Jan 2024 13:19:34 -0500 Subject: [PATCH 06/15] Fix dialyzer errors due to deprecated usage of put_layout/2 --- lib/pleroma/web/embed_controller.ex | 2 -- lib/pleroma/web/o_status/o_status_controller.ex | 1 - lib/pleroma/web/static_fe/static_fe_controller.ex | 1 - 3 files changed, 4 deletions(-) diff --git a/lib/pleroma/web/embed_controller.ex b/lib/pleroma/web/embed_controller.ex index ab0df9c5a..2ca4501a6 100644 --- a/lib/pleroma/web/embed_controller.ex +++ b/lib/pleroma/web/embed_controller.ex @@ -11,8 +11,6 @@ defmodule Pleroma.Web.EmbedController do alias Pleroma.Web.ActivityPub.Visibility - plug(:put_layout, :embed) - def show(conn, %{"id" => id}) do with %Activity{local: true} = activity <- Activity.get_by_id_with_object(id), diff --git a/lib/pleroma/web/o_status/o_status_controller.ex b/lib/pleroma/web/o_status/o_status_controller.ex index 4f2cf02c3..ee7ef4a5d 100644 --- a/lib/pleroma/web/o_status/o_status_controller.ex +++ b/lib/pleroma/web/o_status/o_status_controller.ex @@ -112,7 +112,6 @@ defmodule Pleroma.Web.OStatus.OStatusController do %{data: %{"attachment" => [%{"url" => [url | _]} | _]}} <- object, true <- String.starts_with?(url["mediaType"], ["audio", "video"]) do conn - |> put_layout(:metadata_player) |> put_resp_header("x-frame-options", "ALLOW") |> put_resp_header( "content-security-policy", diff --git a/lib/pleroma/web/static_fe/static_fe_controller.ex b/lib/pleroma/web/static_fe/static_fe_controller.ex index 3f2dbcd02..012f8e464 100644 --- a/lib/pleroma/web/static_fe/static_fe_controller.ex +++ b/lib/pleroma/web/static_fe/static_fe_controller.ex @@ -13,7 +13,6 @@ defmodule Pleroma.Web.StaticFE.StaticFEController do alias Pleroma.Web.Metadata alias Pleroma.Web.Router.Helpers - plug(:put_layout, :static_fe) plug(:assign_id) @page_keys ["max_id", "min_id", "limit", "since_id", "order"] From f933d24b02472352a2928c2987451ceef7208b34 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 31 Jan 2024 13:34:17 -0500 Subject: [PATCH 07/15] Pleroma.Config.DeprecationWarnings: fix type errors detected by gradient lib/pleroma/config/deprecation_warnings.ex: The atom :error on line 278 is expected to have type :ok | nil but it has type :error lib/pleroma/config/deprecation_warnings.ex: The atom :error on line 292 is expected to have type :ok | nil but it has type :error lib/pleroma/config/deprecation_warnings.ex: The atom :error on line 390 is expected to have type :ok | nil but it has type :error lib/pleroma/config/deprecation_warnings.ex: The atom :error on line 413 is expected to have type :ok | nil but it has type :error --- lib/pleroma/config/deprecation_warnings.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/config/deprecation_warnings.ex b/lib/pleroma/config/deprecation_warnings.ex index a77923264..d26c5db72 100644 --- a/lib/pleroma/config/deprecation_warnings.ex +++ b/lib/pleroma/config/deprecation_warnings.ex @@ -256,7 +256,7 @@ defmodule Pleroma.Config.DeprecationWarnings do move_namespace_and_warn(@mrf_config_map, warning_preface) end - @spec move_namespace_and_warn([config_map()], String.t()) :: :ok | nil + @spec move_namespace_and_warn([config_map()], String.t()) :: :ok | nil | :error def move_namespace_and_warn(config_map, warning_preface) do warning = Enum.reduce(config_map, "", fn From 7745ee27bcedbe54be0479cd0561b74218acb8fe Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 31 Jan 2024 13:43:07 -0500 Subject: [PATCH 08/15] Pleroma.MFA.Totp.provisioning_uri/3: add @spec --- lib/pleroma/mfa/totp.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/mfa/totp.ex b/lib/pleroma/mfa/totp.ex index 429c4b700..96fa8d71d 100644 --- a/lib/pleroma/mfa/totp.ex +++ b/lib/pleroma/mfa/totp.ex @@ -14,6 +14,7 @@ defmodule Pleroma.MFA.TOTP do @doc """ https://github.com/google/google-authenticator/wiki/Key-Uri-Format """ + @spec provisioning_uri(String.t(), String.t(), list()) :: String.t() def provisioning_uri(secret, label, opts \\ []) do query = %{ @@ -27,7 +28,7 @@ defmodule Pleroma.MFA.TOTP do |> URI.encode_query() %URI{scheme: "otpauth", host: "totp", path: "/" <> label, query: query} - |> URI.to_string() + |> to_string() end defp default_period, do: Config.get(@config_ns ++ [:period]) From cccfdde14c6742b7bbad0d4e0e25d4b641c721be Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 31 Jan 2024 13:50:43 -0500 Subject: [PATCH 09/15] Pleroma.MFA: fix gradient error lib/pleroma/mfa.ex: The map %{error: msg} on line 80 is expected to have type {:ok, list(binary())} | {:error, String.t()} but it has type %{required(:error) => any()} --- lib/pleroma/mfa.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/mfa.ex b/lib/pleroma/mfa.ex index 01b730c76..ce30cd4ad 100644 --- a/lib/pleroma/mfa.ex +++ b/lib/pleroma/mfa.ex @@ -77,7 +77,7 @@ defmodule Pleroma.MFA do {:ok, codes} else {:error, msg} -> - %{error: msg} + {:error, msg} end end From 15621b72842ad7dc1b1be1a480045498cf815f9b Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 31 Jan 2024 13:58:26 -0500 Subject: [PATCH 10/15] Pleroma.HTTP.RequestBuilder: fix gradient error lib/pleroma/http/request_builder.ex: The variable key on line 69 is expected to have type String.t() but it has type atom() --- lib/pleroma/http/request_builder.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/http/request_builder.ex b/lib/pleroma/http/request_builder.ex index f16fb3b35..0a028a64c 100644 --- a/lib/pleroma/http/request_builder.ex +++ b/lib/pleroma/http/request_builder.ex @@ -54,12 +54,12 @@ defmodule Pleroma.HTTP.RequestBuilder do @doc """ Add optional parameters to the request """ - @spec add_param(Request.t(), atom(), atom(), any()) :: Request.t() + @spec add_param(Request.t(), atom(), atom() | String.t(), any()) :: Request.t() def add_param(request, :query, :query, values), do: %{request | query: values} def add_param(request, :body, :body, value), do: %{request | body: value} - def add_param(request, :body, key, value) do + def add_param(request, :body, key, value) when is_binary(key) do request |> Map.put(:body, Multipart.new()) |> Map.update!( From ac7f2cf105204123c420799bb867005eef14053b Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 31 Jan 2024 14:08:29 -0500 Subject: [PATCH 11/15] Pleroma Emoji mix task: fix gradient error lib/mix/tasks/pleroma/emoji.ex: The tuple {:cwd, pack_path} on line 114 is expected to have type :cooked | :keep_old_files | :memory | :verbose | {:cwd, list(char())} | {:file_filter, (record(:zip_file) -> boolean())} | {:file_list, list(:file.name())} but it has type {:cwd, binary()} --- lib/mix/tasks/pleroma/emoji.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mix/tasks/pleroma/emoji.ex b/lib/mix/tasks/pleroma/emoji.ex index 537f0715e..8b9c921c8 100644 --- a/lib/mix/tasks/pleroma/emoji.ex +++ b/lib/mix/tasks/pleroma/emoji.ex @@ -111,7 +111,7 @@ defmodule Mix.Tasks.Pleroma.Emoji do {:ok, _} = :zip.unzip(binary_archive, - cwd: pack_path, + cwd: String.to_charlist(pack_path), file_list: files_to_unzip ) From bff04da0f32becc34921dceec57b3a65231adc07 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 31 Jan 2024 14:08:54 -0500 Subject: [PATCH 12/15] Pleroma.Emoji.Pack: fix gradient error lib/pleroma/emoji/pack.ex: The tuple {:cwd, tmp_dir} on line 103 is expected to have type :cooked | :keep_old_files | :memory | :verbose | {:cwd, list(char())} | {:file_filter, (record(:zip_file) -> boolean())} | {:file_list, list(:file.name())} but it has type {:cwd, binary()} --- lib/pleroma/emoji/pack.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pleroma/emoji/pack.ex b/lib/pleroma/emoji/pack.ex index 85f7e1877..afc341853 100644 --- a/lib/pleroma/emoji/pack.ex +++ b/lib/pleroma/emoji/pack.ex @@ -100,7 +100,7 @@ defmodule Pleroma.Emoji.Pack do {:ok, _emoji_files} = :zip.unzip( to_charlist(file.path), - [{:file_list, Enum.map(emojies, & &1[:path])}, {:cwd, tmp_dir}] + [{:file_list, Enum.map(emojies, & &1[:path])}, {:cwd, String.to_charlist(tmp_dir)}] ) {_, updated_pack} = From d42b0eb29bdd1e48afa06d6bcf9eee37bc3a4b08 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 31 Jan 2024 14:15:01 -0500 Subject: [PATCH 13/15] Pleroma.Config.DeprecationWarnings: fix gradient errors lib/pleroma/config/deprecation_warnings.ex: The atom :error on line 292 is expected to have type :ok | nil but it has type :error lib/pleroma/config/deprecation_warnings.ex: The function call move_namespace_and_warn( [ {Pleroma.ActivityExpiration, Pleroma.Workers.PurgeExpiredActivity, " * `config :pleroma, Pleroma.ActivityExpiration` is now `config :pleroma, Pleroma.Workers.PurgeExpiredActivity`"} ], warning_preface ) on line 350 is expected to have type :ok | nil but it has type :ok | nil | :error lib/pleroma/config/deprecation_warnings.ex: The function call move_namespace_and_warn( [ {Pleroma.Plugs.RemoteIp, Pleroma.Web.Plugs.RemoteIp, " * `config :pleroma, Pleroma.Plugs.RemoteIp` is now `config :pleroma, Pleroma.Web.Plugs.RemoteIp`"} ], warning_preface ) on line 366 is expected to have type :ok | nil but it has type :ok | nil | :error lib/pleroma/config/deprecation_warnings.ex: The atom :error on line 390 is expected to have type :ok | nil but it has type :error lib/pleroma/config/deprecation_warnings.ex: The atom :error on line 413 is expected to have type :ok | nil but it has type :error --- lib/pleroma/config/deprecation_warnings.ex | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/config/deprecation_warnings.ex b/lib/pleroma/config/deprecation_warnings.ex index d26c5db72..58d164dc7 100644 --- a/lib/pleroma/config/deprecation_warnings.ex +++ b/lib/pleroma/config/deprecation_warnings.ex @@ -256,7 +256,7 @@ defmodule Pleroma.Config.DeprecationWarnings do move_namespace_and_warn(@mrf_config_map, warning_preface) end - @spec move_namespace_and_warn([config_map()], String.t()) :: :ok | nil | :error + @spec move_namespace_and_warn([config_map()], String.t()) :: :ok | :error def move_namespace_and_warn(config_map, warning_preface) do warning = Enum.reduce(config_map, "", fn @@ -279,7 +279,7 @@ defmodule Pleroma.Config.DeprecationWarnings do end end - @spec check_media_proxy_whitelist_config() :: :ok | nil + @spec check_media_proxy_whitelist_config() :: :ok | :error def check_media_proxy_whitelist_config do whitelist = Config.get([:media_proxy, :whitelist]) @@ -340,7 +340,7 @@ defmodule Pleroma.Config.DeprecationWarnings do end end - @spec check_activity_expiration_config() :: :ok | nil + @spec check_activity_expiration_config() :: :ok | :error def check_activity_expiration_config do warning_preface = """ !!!DEPRECATION WARNING!!! @@ -356,7 +356,7 @@ defmodule Pleroma.Config.DeprecationWarnings do ) end - @spec check_remote_ip_plug_name() :: :ok | nil + @spec check_remote_ip_plug_name() :: :ok | :error def check_remote_ip_plug_name do warning_preface = """ !!!DEPRECATION WARNING!!! @@ -372,7 +372,7 @@ defmodule Pleroma.Config.DeprecationWarnings do ) end - @spec check_uploaders_s3_public_endpoint() :: :ok | nil + @spec check_uploaders_s3_public_endpoint() :: :ok | :error def check_uploaders_s3_public_endpoint do s3_config = Pleroma.Config.get([Pleroma.Uploaders.S3]) @@ -393,7 +393,7 @@ defmodule Pleroma.Config.DeprecationWarnings do end end - @spec check_old_chat_shoutbox() :: :ok | nil + @spec check_old_chat_shoutbox() :: :ok | :error def check_old_chat_shoutbox do instance_config = Pleroma.Config.get([:instance]) chat_config = Pleroma.Config.get([:chat]) || [] From a2c686e16c570791e754af7ed8505e77d29549de Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 31 Jan 2024 14:22:17 -0500 Subject: [PATCH 14/15] Pleroma.Filter: fix gradient error lib/pleroma/filter.ex: The clause on line 220 cannot be reached --- lib/pleroma/filter.ex | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/pleroma/filter.ex b/lib/pleroma/filter.ex index db88bc021..e827d3cbc 100644 --- a/lib/pleroma/filter.ex +++ b/lib/pleroma/filter.ex @@ -216,9 +216,6 @@ defmodule Pleroma.Filter do :re -> ~r/\b#{phrases}\b/i - - _ -> - nil end end From 0ffeb84f0cb834228ed878ff63c444b5d1ccf760 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Wed, 31 Jan 2024 14:58:59 -0500 Subject: [PATCH 15/15] Changelog --- changelog.d/dialyzer4.skip | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 changelog.d/dialyzer4.skip diff --git a/changelog.d/dialyzer4.skip b/changelog.d/dialyzer4.skip new file mode 100644 index 000000000..e69de29bb