Skip to content

Commit d638e25

Browse files
Handle corrupt or empty database records (#78)
* Handle corrupt or empty database records In cases where a crash record file is corrupted or empty, BacktraceDatabaseRecord.readFromFile will return null Adds handling for this case by treating it as an invalid record * Add unit test, fix checking null record Co-authored-by: Selali Adobor <selali.adobor@gmail.com> Co-authored-by: Bartosz Litwiniuk <>
1 parent ce4c175 commit d638e25

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

backtrace-library/src/androidTest/java/backtraceio/library/database/BacktraceDatabaseTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@
1414
import org.junit.runner.RunWith;
1515

1616
import java.io.File;
17+
import java.io.IOException;
1718
import java.util.ArrayList;
1819
import java.util.HashMap;
1920
import java.util.List;
2021
import java.util.Map;
22+
import java.util.UUID;
2123

2224
import backtraceio.library.BacktraceClient;
2325
import backtraceio.library.BacktraceCredentials;
@@ -196,4 +198,20 @@ public void recordLimit() {
196198
assertEquals(report2.message, database.get().iterator().next().getBacktraceData(context).report.message);
197199
}
198200

201+
@Test
202+
public void addEmptyFileAndStartDatabase() throws IOException {
203+
// GIVEN
204+
File file = new File(
205+
new File(this.dbPath, String.format("%s-record.json", UUID.randomUUID())).getAbsolutePath()
206+
);
207+
file.createNewFile();
208+
209+
// WHEN
210+
BacktraceDatabase database = new BacktraceDatabase(this.context, this.dbPath);
211+
database.start();
212+
213+
// THEN
214+
assertEquals(database.count(), 0);
215+
}
216+
199217
}

backtrace-library/src/main/java/backtraceio/library/BacktraceDatabase.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,10 @@ private void loadReports() {
415415

416416
for (File file : files) {
417417
BacktraceDatabaseRecord record = BacktraceDatabaseRecord.readFromFile(file);
418+
if (record == null) {
419+
continue;
420+
}
421+
418422
if (!record.valid()) {
419423
record.delete();
420424
continue;

backtrace-library/src/main/java/backtraceio/library/models/database/BacktraceDatabaseRecord.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ public class BacktraceDatabaseRecord {
7474
this._path = "";
7575
this.recordPath = String.format("%s-record.json", this.id);
7676
this.diagnosticDataPath = String.format("%s-attachment", this.id);
77-
this.recordPath = String.format("%s-record.json", this.id);
7877
}
7978

8079
public BacktraceDatabaseRecord(BacktraceData data, String path) {

0 commit comments

Comments
 (0)