From 62fcfc3117414b84ee3e72641846075fa1e165c8 Mon Sep 17 00:00:00 2001 From: George Menhorn Date: Thu, 12 Mar 2026 13:27:25 -0400 Subject: [PATCH 1/2] breadcrumbs: pre-add test demonstrating a bug in addBreadcrumb Captures the current state of the `addBreadcrumb` implementation in BacktraceBreadcrumbs in which the configuration of enabled types is not honored. For example, if a user configures breadcrumbs such that only breadcrumbs of type "MANUAL" are enabled, then (aside from the initial configuration breadcrumb which is added unconditionally) no other breadcrumb types should be added to the breadcrumb log. --- .../breadcrumbs/BacktraceBreadcrumbsTest.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/backtrace-library/src/androidTest/java/backtraceio/library/breadcrumbs/BacktraceBreadcrumbsTest.java b/backtrace-library/src/androidTest/java/backtraceio/library/breadcrumbs/BacktraceBreadcrumbsTest.java index 69dade937..c9ee2ce4c 100644 --- a/backtrace-library/src/androidTest/java/backtraceio/library/breadcrumbs/BacktraceBreadcrumbsTest.java +++ b/backtrace-library/src/androidTest/java/backtraceio/library/breadcrumbs/BacktraceBreadcrumbsTest.java @@ -9,8 +9,10 @@ import android.content.Context; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.platform.app.InstrumentationRegistry; +import backtraceio.library.enums.BacktraceBreadcrumbType; import java.io.File; import java.io.IOException; +import java.util.EnumSet; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -117,6 +119,32 @@ public void testEnableBreadcrumbs() { } } + @Test + public void testAddBreadcrumbRejectsDisabledType() { + try { + cleanUp(); + + backtraceBreadcrumbs = + new BacktraceBreadcrumbs(context.getFilesDir().getAbsolutePath()); + backtraceBreadcrumbs.enableBreadcrumbs(context, EnumSet.of(BacktraceBreadcrumbType.MANUAL)); + + assertTrue(backtraceBreadcrumbs.addBreadcrumb("test-manual", BacktraceBreadcrumbType.MANUAL)); + assertTrue(backtraceBreadcrumbs.addBreadcrumb("test-system", BacktraceBreadcrumbType.SYSTEM)); + assertTrue(backtraceBreadcrumbs.addBreadcrumb("test-http", BacktraceBreadcrumbType.HTTP)); + + List breadcrumbLogFileData = BreadcrumbsReader.readBreadcrumbLogFile( + context.getFilesDir().getAbsolutePath()); + + // Configuration breadcrumb, plus breadcrumb added above. + assertEquals(4, breadcrumbLogFileData.size()); + + JSONObject parsedBreadcrumb = new JSONObject(breadcrumbLogFileData.get(1)); + assertEquals("test-manual", parsedBreadcrumb.get("message")); + } catch (Exception ex) { + fail(ex.getMessage()); + } + } + @Test public void testAddBreadcrumbWithAttributes() { try { From 6f4917ead3859785f8c7e2e793e40c15afb47fc6 Mon Sep 17 00:00:00 2001 From: George Menhorn Date: Thu, 12 Mar 2026 13:36:53 -0400 Subject: [PATCH 2/2] breadcrumbs: fix addBreadcrumb to honor enabled breadcrumb types This commit fixes a bug in addBreadcrumb where the enabled breadcrumb types configuration was not being consulted before adding a breadcrumb. Noticed when investigating a crash report that contained breadcrumb types that were expected to be disabled but were not. --- .../library/breadcrumbs/BacktraceBreadcrumbsTest.java | 6 +++--- .../library/breadcrumbs/BacktraceBreadcrumbs.java | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/backtrace-library/src/androidTest/java/backtraceio/library/breadcrumbs/BacktraceBreadcrumbsTest.java b/backtrace-library/src/androidTest/java/backtraceio/library/breadcrumbs/BacktraceBreadcrumbsTest.java index c9ee2ce4c..a538f69a5 100644 --- a/backtrace-library/src/androidTest/java/backtraceio/library/breadcrumbs/BacktraceBreadcrumbsTest.java +++ b/backtrace-library/src/androidTest/java/backtraceio/library/breadcrumbs/BacktraceBreadcrumbsTest.java @@ -129,14 +129,14 @@ public void testAddBreadcrumbRejectsDisabledType() { backtraceBreadcrumbs.enableBreadcrumbs(context, EnumSet.of(BacktraceBreadcrumbType.MANUAL)); assertTrue(backtraceBreadcrumbs.addBreadcrumb("test-manual", BacktraceBreadcrumbType.MANUAL)); - assertTrue(backtraceBreadcrumbs.addBreadcrumb("test-system", BacktraceBreadcrumbType.SYSTEM)); - assertTrue(backtraceBreadcrumbs.addBreadcrumb("test-http", BacktraceBreadcrumbType.HTTP)); + assertFalse(backtraceBreadcrumbs.addBreadcrumb("test-system", BacktraceBreadcrumbType.SYSTEM)); + assertFalse(backtraceBreadcrumbs.addBreadcrumb("test-http", BacktraceBreadcrumbType.HTTP)); List breadcrumbLogFileData = BreadcrumbsReader.readBreadcrumbLogFile( context.getFilesDir().getAbsolutePath()); // Configuration breadcrumb, plus breadcrumb added above. - assertEquals(4, breadcrumbLogFileData.size()); + assertEquals(2, breadcrumbLogFileData.size()); JSONObject parsedBreadcrumb = new JSONObject(breadcrumbLogFileData.get(1)); assertEquals("test-manual", parsedBreadcrumb.get("message")); diff --git a/backtrace-library/src/main/java/backtraceio/library/breadcrumbs/BacktraceBreadcrumbs.java b/backtrace-library/src/main/java/backtraceio/library/breadcrumbs/BacktraceBreadcrumbs.java index ab049a173..3e574cfe9 100644 --- a/backtrace-library/src/main/java/backtraceio/library/breadcrumbs/BacktraceBreadcrumbs.java +++ b/backtrace-library/src/main/java/backtraceio/library/breadcrumbs/BacktraceBreadcrumbs.java @@ -320,6 +320,9 @@ public boolean addBreadcrumb( if (!this.isEnabled() || backtraceBreadcrumbsLogManager == null) { return false; } + if (!enabledBreadcrumbTypes.contains(type)) { + return false; + } boolean addResult = backtraceBreadcrumbsLogManager.addBreadcrumb(message, attributes, type, level); if (addResult && this.onSuccessfulBreadcrumbAddEventListener != null) { this.onSuccessfulBreadcrumbAddEventListener.onSuccessfulAdd(this.getCurrentBreadcrumbId());