Skip to content

Commit

Permalink
fix(ndk): clearly marked read-only char* arguments as const
Browse files Browse the repository at this point in the history
  • Loading branch information
lemnik committed May 21, 2021
1 parent 6461462 commit 8f1a470
Show file tree
Hide file tree
Showing 7 changed files with 144 additions and 94 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Changelog

## TBD

* Including bugsnag.h in C++ code will no longer cause writable-strings warnings
[1260](https://github.com/bugsnag/bugsnag-android/pull/1260)

## 5.9.3 (2021-05-18)

* Avoid unnecessary collection of Thread stacktraces
Expand Down
21 changes: 15 additions & 6 deletions bugsnag-plugin-android-ndk/src/main/assets/include/bugsnag.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,29 +16,38 @@ typedef bool (*bsg_on_error)(void *);
* @param env The JNI environment to use when using convenience methods
*/
void bugsnag_start(JNIEnv *env);

/**
* Sends an error report to Bugsnag
* @param name The name of the error
* @param message The error message
* @param severity The severity of the error
*/
void bugsnag_notify(char *name, char *message, bugsnag_severity severity);
void bugsnag_notify_env(JNIEnv *env, char *name, char *message,
void bugsnag_notify(const char *name, const char *message,
bugsnag_severity severity);

void bugsnag_notify_env(JNIEnv *env, const char *name, const char *message,
bugsnag_severity severity);

/**
* Set the current user
* @param id The identifier of the user
* @param email The user's email
* @param name The user's name
*/
void bugsnag_set_user(char *id, char *email, char *name);
void bugsnag_set_user_env(JNIEnv *env, char *id, char *email, char *name);
void bugsnag_set_user(const char *id, const char *email, const char *name);

void bugsnag_set_user_env(JNIEnv *env, const char *id, const char *email,
const char *name);

/**
* Leave a breadcrumb, indicating an event of significance which will be logged
* in subsequent error reports
*/
void bugsnag_leave_breadcrumb(char *message, bugsnag_breadcrumb_type type);
void bugsnag_leave_breadcrumb_env(JNIEnv *env, char *message,
void bugsnag_leave_breadcrumb(const char *message,
bugsnag_breadcrumb_type type);

void bugsnag_leave_breadcrumb_env(JNIEnv *env, const char *message,
bugsnag_breadcrumb_type type);

/**
Expand Down
98 changes: 62 additions & 36 deletions bugsnag-plugin-android-ndk/src/main/assets/include/event.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ char *bugsnag_event_get_api_key(void *event_ptr);
* @param event_ptr a pointer to the event supplied in an on_error callback
* @param value the new event api key value, which cannot be NULL
*/
void bugsnag_event_set_api_key(void *event_ptr, char *value);
void bugsnag_event_set_api_key(void *event_ptr, const char *value);

/* Accessors for event.context */

Expand All @@ -107,7 +107,7 @@ char *bugsnag_event_get_context(void *event_ptr);
* @param event_ptr a pointer to the event supplied in an on_error callback
* @param value the new event context value, which can be NULL
*/
void bugsnag_event_set_context(void *event_ptr, char *value);
void bugsnag_event_set_context(void *event_ptr, const char *value);

/* Accessors for event.app */

Expand Down Expand Up @@ -135,10 +135,11 @@ char *bugsnag_app_get_binary_arch(void *event_ptr);
* @param event_ptr - a pointer to the bugsnag event
* @param value - the new value for the binary_arch field (nullable)
*/
void bugsnag_app_set_binary_arch(void *event_ptr, char *value);
void bugsnag_app_set_binary_arch(void *event_ptr, const char *value);

char *bugsnag_app_get_build_uuid(void *event_ptr);
void bugsnag_app_set_build_uuid(void *event_ptr, char *value);

void bugsnag_app_set_build_uuid(void *event_ptr, const char *value);

time_t bugsnag_app_get_duration(void *event_ptr);
void bugsnag_app_set_duration(void *event_ptr, time_t value);
Expand All @@ -147,7 +148,8 @@ time_t bugsnag_app_get_duration_in_foreground(void *event_ptr);
void bugsnag_app_set_duration_in_foreground(void *event_ptr, time_t value);

char *bugsnag_app_get_id(void *event_ptr);
void bugsnag_app_set_id(void *event_ptr, char *value);

void bugsnag_app_set_id(void *event_ptr, const char *value);

bool bugsnag_app_get_in_foreground(void *event_ptr);
void bugsnag_app_set_in_foreground(void *event_ptr, bool value);
Expand All @@ -156,13 +158,16 @@ bool bugsnag_app_get_is_launching(void *event_ptr);
void bugsnag_app_set_is_launching(void *event_ptr, bool value);

char *bugsnag_app_get_release_stage(void *event_ptr);
void bugsnag_app_set_release_stage(void *event_ptr, char *value);

void bugsnag_app_set_release_stage(void *event_ptr, const char *value);

char *bugsnag_app_get_type(void *event_ptr);
void bugsnag_app_set_type(void *event_ptr, char *value);

void bugsnag_app_set_type(void *event_ptr, const char *value);

char *bugsnag_app_get_version(void *event_ptr);
void bugsnag_app_set_version(void *event_ptr, char *value);

void bugsnag_app_set_version(void *event_ptr, const char *value);

int bugsnag_app_get_version_code(void *event_ptr);
void bugsnag_app_set_version_code(void *event_ptr, int value);
Expand All @@ -173,42 +178,52 @@ bool bugsnag_device_get_jailbroken(void *event_ptr);
void bugsnag_device_set_jailbroken(void *event_ptr, bool value);

char *bugsnag_device_get_id(void *event_ptr);
void bugsnag_device_set_id(void *event_ptr, char *value);

void bugsnag_device_set_id(void *event_ptr, const char *value);

char *bugsnag_device_get_locale(void *event_ptr);
void bugsnag_device_set_locale(void *event_ptr, char *value);

void bugsnag_device_set_locale(void *event_ptr, const char *value);

char *bugsnag_device_get_manufacturer(void *event_ptr);
void bugsnag_device_set_manufacturer(void *event_ptr, char *value);

void bugsnag_device_set_manufacturer(void *event_ptr, const char *value);

char *bugsnag_device_get_model(void *event_ptr);
void bugsnag_device_set_model(void *event_ptr, char *value);

void bugsnag_device_set_model(void *event_ptr, const char *value);

char *bugsnag_device_get_os_version(void *event_ptr);
void bugsnag_device_set_os_version(void *event_ptr, char *value);

void bugsnag_device_set_os_version(void *event_ptr, const char *value);

long bugsnag_device_get_total_memory(void *event_ptr);
void bugsnag_device_set_total_memory(void *event_ptr, long value);

char *bugsnag_device_get_orientation(void *event_ptr);
void bugsnag_device_set_orientation(void *event_ptr, char *value);

void bugsnag_device_set_orientation(void *event_ptr, const char *value);

time_t bugsnag_device_get_time(void *event_ptr);
void bugsnag_device_set_time(void *event_ptr, time_t value);

char *bugsnag_device_get_os_name(void *event_ptr);
void bugsnag_device_set_os_name(void *event_ptr, char *value);

void bugsnag_device_set_os_name(void *event_ptr, const char *value);

/* Accessors for event.error */

char *bugsnag_error_get_error_class(void *event_ptr);
void bugsnag_error_set_error_class(void *event_ptr, char *value);

void bugsnag_error_set_error_class(void *event_ptr, const char *value);

char *bugsnag_error_get_error_message(void *event_ptr);
void bugsnag_error_set_error_message(void *event_ptr, char *value);

void bugsnag_error_set_error_message(void *event_ptr, const char *value);

char *bugsnag_error_get_error_type(void *event_ptr);
void bugsnag_error_set_error_type(void *event_ptr, char *value);

void bugsnag_error_set_error_type(void *event_ptr, const char *value);

/* Accessors for event.user */

Expand All @@ -225,7 +240,9 @@ void bugsnag_error_set_error_type(void *event_ptr, char *value);
* @return the user in the event, represented as a struct
*/
bugsnag_user bugsnag_event_get_user(void *event_ptr);
void bugsnag_event_set_user(void *event_ptr, char *id, char *email, char *name);

void bugsnag_event_set_user(void *event_ptr, const char *id, const char *email,
const char *name);

/* Accessors for event.severity */

Expand Down Expand Up @@ -263,19 +280,24 @@ void bugsnag_event_set_unhandled(void *event_ptr, bool value);
/* Accessors for event.groupingHash */

char *bugsnag_event_get_grouping_hash(void *event_ptr);
void bugsnag_event_set_grouping_hash(void *event_ptr, char *value);

void bugsnag_event_set_grouping_hash(void *event_ptr, const char *value);

/* Accessors for event.metadata */

void bugsnag_event_add_metadata_double(void *event_ptr, char *section,
char *name, double value);
void bugsnag_event_add_metadata_string(void *event_ptr, char *section,
char *name, char *value);
void bugsnag_event_add_metadata_bool(void *event_ptr, char *section, char *name,
bool value);
void bugsnag_event_add_metadata_double(void *event_ptr, const char *section,
const char *name, double value);

void bugsnag_event_add_metadata_string(void *event_ptr, const char *section,
const char *name, const char *value);

void bugsnag_event_clear_metadata_section(void *event_ptr, char *section);
void bugsnag_event_clear_metadata(void *event_ptr, char *section, char *name);
void bugsnag_event_add_metadata_bool(void *event_ptr, const char *section,
const char *name, bool value);

void bugsnag_event_clear_metadata_section(void *event_ptr, const char *section);

void bugsnag_event_clear_metadata(void *event_ptr, const char *section,
const char *name);

/**
* Retrieves the metadata type for a given section and key in this event.
Expand All @@ -299,8 +321,9 @@ void bugsnag_event_clear_metadata(void *event_ptr, char *section, char *name);
* @return the type of the metadata, or BSG_METADATA_NONE_VALUE if no value
* exists
*/
bugsnag_metadata_type bugsnag_event_has_metadata(void *event_ptr, char *section,
char *name);
bugsnag_metadata_type bugsnag_event_has_metadata(void *event_ptr,
const char *section,
const char *name);

/**
* Retrieves the metadata value for a given section and key in this event.
Expand All @@ -319,16 +342,19 @@ bugsnag_metadata_type bugsnag_event_has_metadata(void *event_ptr, char *section,
* @param name - the metadata section name
* @param value - the value to set on the given key/name
*/
double bugsnag_event_get_metadata_double(void *event_ptr, char *section,
char *name);
char *bugsnag_event_get_metadata_string(void *event_ptr, char *section,
char *name);
bool bugsnag_event_get_metadata_bool(void *event_ptr, char *section,
char *name);
double bugsnag_event_get_metadata_double(void *event_ptr, const char *section,
const char *name);

char *bugsnag_event_get_metadata_string(void *event_ptr, const char *section,
const char *name);

bool bugsnag_event_get_metadata_bool(void *event_ptr, const char *section,
const char *name);

/* Accessors for event.error.stacktrace */

int bugsnag_event_get_stacktrace_size(void *event_ptr);

bugsnag_stackframe *bugsnag_event_get_stackframe(void *event_ptr, int index);

#ifdef __cplusplus
Expand Down
24 changes: 15 additions & 9 deletions bugsnag-plugin-android-ndk/src/main/jni/bugsnag.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,25 @@ void bugsnag_set_binary_arch(JNIEnv *env);

void bugsnag_start(JNIEnv *env) { bsg_global_jni_env = env; }

void bugsnag_notify_env(JNIEnv *env, char *name, char *message,
void bugsnag_notify_env(JNIEnv *env, const char *name, const char *message,
bugsnag_severity severity);
void bugsnag_set_user_env(JNIEnv *env, char *id, char *email, char *name);
void bugsnag_leave_breadcrumb_env(JNIEnv *env, char *message,

void bugsnag_set_user_env(JNIEnv *env, const char *id, const char *email,
const char *name);

void bugsnag_leave_breadcrumb_env(JNIEnv *env, const char *message,
bugsnag_breadcrumb_type type);

void bugsnag_notify(char *name, char *message, bugsnag_severity severity) {
void bugsnag_notify(const char *name, const char *message,
bugsnag_severity severity) {
if (bsg_global_jni_env != NULL) {
bugsnag_notify_env(bsg_global_jni_env, name, message, severity);
} else {
BUGSNAG_LOG("Cannot bugsnag_notify before initializing with bugsnag_start");
}
}

void bugsnag_set_user(char *id, char *email, char *name) {
void bugsnag_set_user(const char *id, const char *email, const char *name) {
if (bsg_global_jni_env != NULL) {
bugsnag_set_user_env(bsg_global_jni_env, id, email, name);
} else {
Expand All @@ -41,7 +45,8 @@ void bugsnag_set_user(char *id, char *email, char *name) {
}
}

void bugsnag_leave_breadcrumb(char *message, bugsnag_breadcrumb_type type) {
void bugsnag_leave_breadcrumb(const char *message,
bugsnag_breadcrumb_type type) {
if (bsg_global_jni_env != NULL) {
bugsnag_leave_breadcrumb_env(bsg_global_jni_env, message, type);
} else {
Expand Down Expand Up @@ -106,7 +111,7 @@ void bsg_populate_notify_stacktrace(JNIEnv *env, bugsnag_stackframe *stacktrace,
}
}

void bugsnag_notify_env(JNIEnv *env, char *name, char *message,
void bugsnag_notify_env(JNIEnv *env, const char *name, const char *message,
bugsnag_severity severity) {
jclass interface_class = NULL;
jmethodID notify_method = NULL;
Expand Down Expand Up @@ -241,7 +246,8 @@ void bugsnag_set_binary_arch(JNIEnv *env) {
bsg_safe_delete_local_ref(env, interface_class);
}

void bugsnag_set_user_env(JNIEnv *env, char *id, char *email, char *name) {
void bugsnag_set_user_env(JNIEnv *env, const char *id, const char *email,
const char *name) {
// lookup com/bugsnag/android/NativeInterface
jclass interface_class = NULL;
jmethodID set_user_method = NULL;
Expand Down Expand Up @@ -303,7 +309,7 @@ jfieldID bsg_parse_jcrumb_type(JNIEnv *env, bugsnag_breadcrumb_type type,
}
}

void bugsnag_leave_breadcrumb_env(JNIEnv *env, char *message,
void bugsnag_leave_breadcrumb_env(JNIEnv *env, const char *message,
bugsnag_breadcrumb_type type) {
jclass interface_class = NULL;
jmethodID leave_breadcrumb_method = NULL;
Expand Down
Loading

0 comments on commit 8f1a470

Please sign in to comment.