From b849489097563f42446a64d6444376372c55c329 Mon Sep 17 00:00:00 2001 From: Phillip Davis Date: Mon, 6 Apr 2026 20:42:16 -0400 Subject: [PATCH] fix: guard destroyItem against null entries in ViewPager mItems `null` was to `ConversationPage` in `destroyItem` when `ViewPager.dataSetChanged`'s POSITION_NONE branch cleaned up a dormant null in `mItems`. The null originates from `instantiateItem`'s bounds-check branch (`position-2 >= sessions.size() -> return null`), which ViewPager stores via `addNewItem` and later passes back to `destroyItem` during cleanup. Deterministically tested fix by the first call to `instantiateItem` should return `null`, after which a `notifyDataSetChanged` via tapping another command. Resulted in same crash as the report. --- src/main/java/eu/siacs/conversations/entities/Conversation.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index d1a826248df7c18dbefc3d26b5f6db54b28d0d77..b86f42cd1b4f071d146547948713dea44f3accd4 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -2059,6 +2059,7 @@ public class Conversation extends AbstractEntity @Override public void destroyItem(@NonNull ViewGroup container, int position, Object o) { + if (o == null) return; if (position < 2) { container.removeView((View) o); return;