Skip to content

Commit

Permalink
feat: add migration between bugsnag_report_v1 and v2
Browse files Browse the repository at this point in the history
  • Loading branch information
fractalwrench committed Mar 19, 2019
1 parent 6197628 commit 5f4cd4c
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 6 deletions.
2 changes: 1 addition & 1 deletion ndk/src/main/jni/report.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
/**
* Version of the bugsnag_report struct. Serialized to report header.
*/
#define BUGSNAG_REPORT_VERSION 1
#define BUGSNAG_REPORT_VERSION 2

#define BUGSNAG_USER_INFO_LEN 64
#ifdef __cplusplus
Expand Down
61 changes: 56 additions & 5 deletions ndk/src/main/jni/utils/serializer.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <utils/migrate.h>

#ifdef __cplusplus
extern "C" {
Expand Down Expand Up @@ -40,18 +41,68 @@ bugsnag_report *bsg_deserialize_report_from_file(char *filepath) {
return bsg_report_read(fd);
}

bugsnag_report_v1 *bsg_report_v1_read(int fd) {
size_t report_size = sizeof(bugsnag_report_v1);
bugsnag_report_v1 *report = malloc(report_size);

ssize_t len = read(fd, report, report_size);
if (len != report_size) {
return NULL;
}
return report;
}

bugsnag_report *bsg_report_v2_read(int fd) {
size_t report_size = sizeof(bugsnag_report);
bugsnag_report *report = malloc(report_size);

ssize_t len = read(fd, report, report_size);
if (len != report_size) {
return NULL;
}
return report;
}

bugsnag_report *bsg_report_read(int fd) {
bsg_report_header *header = bsg_report_header_read(fd);
if (header == NULL) {
return NULL;
}
// FUTURE: use header info to check version/endianness & migrate

int report_version = header->version;
free(header);
bugsnag_report *report = malloc(sizeof(bugsnag_report));

ssize_t len = read(fd, report, sizeof(bugsnag_report));
if (len != sizeof(bugsnag_report)) {
return NULL;
bugsnag_report *report = NULL;

if (report_version == 1) { // 'report->unhandled_events' was added in v2
bugsnag_report_v1 *report_v1 = bsg_report_v1_read(fd);

if (report_v1 != NULL) {
report = malloc(sizeof(bugsnag_report));

report->notifier = report_v1->notifier;
report->app = report_v1->app;
report->device = report_v1->device;
report->user = report_v1->user;
report->exception = report_v1->exception;
report->metadata = report_v1->metadata;
report->crumb_count = report_v1->crumb_count;
report->crumb_first_index = report_v1->crumb_first_index;

size_t breadcrumb_size = sizeof(bugsnag_breadcrumb) * BUGSNAG_CRUMBS_MAX;
memcpy(&report->breadcrumbs, report_v1->breadcrumbs, breadcrumb_size);

strcpy(report->context, report_v1->context);
report->severity = report_v1->severity;
strcpy(report->session_id, report_v1->session_id);
strcpy(report->session_start, report_v1->session_start);
report->handled_events = report_v1->handled_events;
report->unhandled_events = 1;

free(report_v1);
}
} else {
report = bsg_report_v2_read(fd);
}
return report;
}
Expand Down

0 comments on commit 5f4cd4c

Please sign in to comment.