mrf/keyword_policy.ex: Fix when summary == nil, do not whitelist content == nil
authorHaelwenn (lanodan) Monnier <contact@hacktivis.me>
Sun, 24 Mar 2019 14:47:50 +0000 (15:47 +0100)
committerHaelwenn (lanodan) Monnier <contact@hacktivis.me>
Sun, 24 Mar 2019 14:47:50 +0000 (15:47 +0100)
lib/pleroma/web/activity_pub/mrf/keyword_policy.ex

index 25d5f9cd36f628b2d20c43144c636029c810ac6e..e8dfba672a8f676fe8eb0c24a1d0a804991e0ebe 100644 (file)
@@ -4,6 +4,10 @@
 
 defmodule Pleroma.Web.ActivityPub.MRF.KeywordPolicy do
   @behaviour Pleroma.Web.ActivityPub.MRF
+  defp string_matches?(string, _) when not is_binary(string) do
+    false
+  end
+
   defp string_matches?(string, pattern) when is_binary(pattern) do
     String.contains?(string, pattern)
   end
@@ -44,6 +48,20 @@ defmodule Pleroma.Web.ActivityPub.MRF.KeywordPolicy do
   end
 
   defp check_replace(%{"object" => %{"content" => content, "summary" => summary}} = message) do
+    content =
+      if is_binary(content) do
+        content
+      else
+        ""
+      end
+
+    summary =
+      if is_binary(summary) do
+        summary
+      else
+        ""
+      end
+
     {content, summary} =
       Enum.reduce(
         Pleroma.Config.get([:mrf_keyword, :replace]),
@@ -60,11 +78,6 @@ defmodule Pleroma.Web.ActivityPub.MRF.KeywordPolicy do
      |> put_in(["object", "summary"], summary)}
   end
 
-  @impl true
-  def filter(%{"object" => %{"content" => nil}} = message) do
-    {:ok, message}
-  end
-
   @impl true
   def filter(%{"type" => "Create", "object" => %{"content" => _content}} = message) do
     with {:ok, message} <- check_reject(message),