Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(ndk): clearly marked read-only char* arguments as const #1260

Merged
merged 1 commit into from
May 21, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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