--- a/keydb.ml
+++ b/keydb.ml
@@ -1172,29 +1172,38 @@ struct
     try
       if has_hash hash then [] else
         let keyid = Fingerprint.keyid_from_key ~short:true key in
-        let potential_merges = List.filter ~f:(fun x -> x <> key)
-                                 (get_by_short_keyid keyid)
-        in
-        plerror 4 "%d potential merges found for keyid %s"
-          (List.length potential_merges) (KeyHash.hexify keyid);
-        let (deletions,mergedkey) =
-          List.fold_left ~init:([],key) potential_merges
-            ~f:(fun (updates,key) x ->
-                  match KeyMerge.merge key x with
-                    | None -> (updates,key)
-                    | Some mergedkey ->
-                        ((x, DeleteKey)::updates,
-                         mergedkey)
-               )
-        in
-        let addition = (mergedkey,AddKey) in
-        let updates = addition::deletions in
-        let updates = List.rev updates in
-        let updates = List.map updates
-                        ~f:(fun (key,action) -> (key_to_metadata key,action))
-        in
-        plerror 4 "%d updates found before filtering" (List.length updates);
-        updates
+        let keyid_long = Fingerprint.keyid_to_string ~short:false (Fingerprint.keyid_from_key ~short:false key) in
+
+        (* Blacklist poison key - RT#112669 *)
+        plerror 4 "considering keyid %s" keyid_long;
+        if List.mem keyid_long [
+            "E41ED3A107A7DBC7"; (* 2018-07-16 *)
+            "86CE877469D2EAD9"; (* 2019-01-22 *)
+            "73E287A82CF1B349"; (* 2020-09-18 *)
+          ] then [] else
+          let potential_merges = List.filter ~f:(fun x -> x <> key)
+                                   (get_by_short_keyid keyid)
+          in
+          plerror 4 "%d potential merges found for keyid %s (%s)"
+            (List.length potential_merges) (KeyHash.hexify keyid) keyid_long;
+          let (deletions,mergedkey) =
+            List.fold_left ~init:([],key) potential_merges
+              ~f:(fun (updates,key) x ->
+                    match KeyMerge.merge key x with
+                      | None -> (updates,key)
+                      | Some mergedkey ->
+                          ((x, DeleteKey)::updates,
+                           mergedkey)
+                 )
+          in
+          let addition = (mergedkey,AddKey) in
+          let updates = addition::deletions in
+          let updates = List.rev updates in
+          let updates = List.map updates
+                          ~f:(fun (key,action) -> (key_to_metadata key,action))
+          in
+          plerror 4 "%d updates found before filtering" (List.length updates);
+          updates
     with
       | Sys.Break | Eventloop.SigAlarm as e -> raise e
       | Bdb.DBError s as e ->
