From 21a5d1dca2edfda01d75038ec4452c7ea8967428 Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Tue, 27 Oct 2026 12:53:21 +0400 Subject: [PATCH] fix(notifications): skip the filter check for objects without content Regex.match? raised on objects without content (for example posts with only attachments), so no notifications were created for them when the recipient had an irreversible filter. --- changelog.d/notification-filter-nil-content.fix | 1 + lib/pleroma/notification.ex | 3 +++ test/pleroma/notification_test.exs | 17 +++++++++++++++++ 3 files changed, 21 insertions(+) create mode 100644 changelog.d/notification-filter-nil-content.fix diff --git a/changelog.d/notification-filter-nil-content.fix b/changelog.d/notification-filter-nil-content.fix new file mode 100644 index 000000000..56b3ad6d1 --- /dev/null +++ b/changelog.d/notification-filter-nil-content.fix @@ -0,0 +1 @@ +Do not crash when creating notifications for posts without content while the user has filters diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index afd750823..6e4a97a25 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -821,6 +821,9 @@ defmodule Pleroma.Notification do object.data["actor"] == user.ap_id -> false + not is_binary(object.data["content"]) -> + false + not is_nil(regex = Pleroma.Filter.compose_regex(user, :re)) -> Regex.match?(regex, object.data["content"]) diff --git a/test/pleroma/notification_test.exs b/test/pleroma/notification_test.exs index 992b15f8b..1ff014a8d 100644 --- a/test/pleroma/notification_test.exs +++ b/test/pleroma/notification_test.exs @@ -9,6 +9,7 @@ defmodule Pleroma.NotificationTest do alias Pleroma.FollowingRelationship alias Pleroma.Notification + alias Pleroma.Object alias Pleroma.Repo alias Pleroma.Tests.ObanHelpers alias Pleroma.User @@ -276,6 +277,22 @@ defmodule Pleroma.NotificationTest do assert {:ok, []} == Notification.create_notifications(status) end + test "it creates notifications for objects without content when the user has filters" do + author = insert(:user) + user = insert(:user) + insert(:filter, user: user, phrase: "cofe", hide: true) + + {:ok, status} = CommonAPI.post(author, %{status: "hey @#{user.nickname}"}) + object = Object.normalize(status, fetch: false) + + {:ok, _} = + object + |> Object.change(%{data: Map.delete(object.data, "content")}) + |> Object.update_and_set_cache() + + assert {:ok, [_]} = Notification.create_notifications(Pleroma.Activity.get_by_id(status.id)) + end + test "it creates notifications if content matches with a not irreversible filter" do user = insert(:user) subscriber = insert(:user)