Skip to content

Commit dbd3647

Browse files
authored
fix: UTF-8 retention problems with native SentryEvent properties (#345)
1 parent a025716 commit dbd3647

File tree

4 files changed

+30
-49
lines changed

4 files changed

+30
-49
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
- Potential crash in SentryLogger if removed early ([#323](https://github.com/getsentry/sentry-godot/pull/323))
1717
- Ensure compatibility with minSdk 24 on Android ([#324](https://github.com/getsentry/sentry-godot/pull/324))
18+
- Fixed UTF-8 retention problems with native SentryEvent properties ([#345](https://github.com/getsentry/sentry-godot/pull/345))
1819

1920
## Other changes
2021

project/test/suites/test_event.gd

Lines changed: 19 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,26 @@ extends GdUnitTestSuite
22
## Basic tests for the SentryEvent class.
33

44

5-
## SentryEvent.id should not be empty on event creation.
6-
func test_event_id() -> void:
5+
## Test string properties accessors and UTF-8 encoding preservation.
6+
@warning_ignore("unused_parameter")
7+
func test_string_properties_and_utf8(property: String, test_parameters := [
8+
["message"],
9+
["logger"],
10+
["release"],
11+
["dist"],
12+
["environment"],
13+
]) -> void:
714
var event := SentrySDK.create_event()
8-
assert_str(event.id).is_not_empty()
15+
event.set(property, "Hello, World!")
16+
assert_str(event.get(property)).is_equal("Hello, World!")
17+
event.set(property, "Hello 世界! 👋")
18+
assert_str(event.get(property)).is_equal("Hello 世界! 👋")
919

1020

11-
## SentryEvent.message should be set to the specified value, and should be empty on event creation.
12-
func test_event_message() -> void:
21+
## SentryEvent.id should not be empty on event creation.
22+
func test_event_id_not_empty() -> void:
1323
var event := SentrySDK.create_event()
14-
assert_str(event.message).is_empty()
15-
event.message = "Hello, World!"
16-
assert_str(event.message).is_equal("Hello, World!")
24+
assert_str(event.id).is_not_empty()
1725

1826

1927
## SentryEvent.level should be set to the specified value.
@@ -51,43 +59,11 @@ func test_event_timestamp() -> void:
5159

5260

5361
## SentryEvent.platform should not be empty.
54-
func test_event_platform() -> void:
62+
func test_event_platform_not_empty() -> void:
5563
var event := SentrySDK.create_event()
5664
assert_str(event.platform).is_not_empty()
5765

5866

59-
## SentryEvent.logger should be set to the specified value, and empty on event creation.
60-
func test_event_logger() -> void:
61-
var event := SentrySDK.create_event()
62-
assert_str(event.logger).is_empty()
63-
event.logger = "custom-logger"
64-
assert_str(event.logger).is_equal("custom-logger")
65-
66-
67-
## SentryEvent.release should be set to the specified value, and empty on event creation.
68-
func test_event_release() -> void:
69-
var event := SentrySDK.create_event()
70-
assert_str(event.release).is_empty()
71-
event.release = "custom-release"
72-
assert_str(event.release).is_equal("custom-release")
73-
74-
75-
## SentryEvent.dist should be set to the specified value, and empty on event creation.
76-
func test_event_dist() -> void:
77-
var event := SentrySDK.create_event()
78-
assert_str(event.dist).is_empty()
79-
event.dist = "custom-dist"
80-
assert_str(event.dist).is_equal("custom-dist")
81-
82-
83-
## SentryEvent.environment should be set to the specified value, and empty on event creation.
84-
func test_event_environment() -> void:
85-
var event := SentrySDK.create_event()
86-
assert_str(event.environment).is_empty()
87-
event.environment = "custom-environment"
88-
assert_str(event.environment).is_equal("custom-environment")
89-
90-
9167
## SentryEvent.set_tag() should set tag to the specified value, remove_tag() should unset it.
9268
func test_event_tags() -> void:
9369
var event := SentrySDK.create_event()
@@ -96,6 +72,8 @@ func test_event_tags() -> void:
9672
assert_str(event.get_tag("test_tag")).is_equal("test_value")
9773
event.remove_tag("test_tag")
9874
assert_str(event.get_tag("test_tag")).is_empty()
75+
event.set_tag("test_utf8", "Hello 世界! 👋")
76+
assert_str(event.get_tag("test_utf8")).is_equal("Hello 世界! 👋")
9977

10078

10179
## SentryEvent.is_crash() should return false on a custom-created event.

project/test/suites/test_sdk.gd

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ signal callback_processed
66

77

88
## SentrySDK.capture_message() should return a non-empty event ID, which must match the ID returned by the get_last_event_id() call.
9-
func test_capture_message() -> void:
9+
func test_capture_message_id() -> void:
1010
var event_id := SentrySDK.capture_message("capture_message_test", SentrySDK.LEVEL_DEBUG)
1111
assert_str(event_id).is_not_empty()
1212
assert_str(SentrySDK.get_last_event_id()).is_not_empty()
@@ -18,10 +18,12 @@ func test_set_tag() -> void:
1818
SentrySDK._set_before_send(
1919
func(ev: SentryEvent):
2020
assert_str(ev.get_tag("custom-tag")).is_equal("custom-tag-value")
21+
assert_str(ev.get_tag("utf8-test")).is_equal("Hello 世界! 👋")
2122
callback_processed.emit()
2223
return null)
2324

2425
SentrySDK.set_tag("custom-tag", "custom-tag-value")
26+
SentrySDK.set_tag("utf8-test", "Hello 世界! 👋")
2527

2628
var monitor := monitor_signals(self, false)
2729
SentrySDK.capture_message("test-tags")

src/sentry/native/native_event.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ String NativeEvent::get_message() const {
7373
return String();
7474
}
7575
sentry_value_t formatted = sentry_value_get_by_key(message, "formatted");
76-
return sentry_value_as_string(formatted);
76+
return String::utf8(sentry_value_as_string(formatted));
7777
}
7878

7979
void NativeEvent::set_timestamp(const Ref<SentryTimestamp> &p_timestamp) {
@@ -91,7 +91,7 @@ Ref<SentryTimestamp> NativeEvent::get_timestamp() const {
9191

9292
String NativeEvent::get_platform() const {
9393
sentry_value_t platform = sentry_value_get_by_key(native_event, "platform");
94-
return sentry_value_as_string(platform);
94+
return String::utf8(sentry_value_as_string(platform));
9595
}
9696

9797
void NativeEvent::set_level(sentry::Level p_level) {
@@ -116,7 +116,7 @@ void NativeEvent::set_logger(const String &p_logger) {
116116

117117
String NativeEvent::get_logger() const {
118118
sentry_value_t logger = sentry_value_get_by_key(native_event, "logger");
119-
return sentry_value_as_string(logger);
119+
return String::utf8(sentry_value_as_string(logger));
120120
}
121121

122122
void NativeEvent::set_release(const String &p_release) {
@@ -125,7 +125,7 @@ void NativeEvent::set_release(const String &p_release) {
125125

126126
String NativeEvent::get_release() const {
127127
sentry_value_t release = sentry_value_get_by_key(native_event, "release");
128-
return sentry_value_as_string(release);
128+
return String::utf8(sentry_value_as_string(release));
129129
}
130130

131131
void NativeEvent::set_dist(const String &p_dist) {
@@ -134,7 +134,7 @@ void NativeEvent::set_dist(const String &p_dist) {
134134

135135
String NativeEvent::get_dist() const {
136136
sentry_value_t dist = sentry_value_get_by_key(native_event, "dist");
137-
return sentry_value_as_string(dist);
137+
return String::utf8(sentry_value_as_string(dist));
138138
}
139139

140140
void NativeEvent::set_environment(const String &p_environment) {
@@ -143,7 +143,7 @@ void NativeEvent::set_environment(const String &p_environment) {
143143

144144
String NativeEvent::get_environment() const {
145145
sentry_value_t environment = sentry_value_get_by_key(native_event, "environment");
146-
return sentry_value_as_string(environment);
146+
return String::utf8(sentry_value_as_string(environment));
147147
}
148148

149149
void NativeEvent::set_tag(const String &p_key, const String &p_value) {
@@ -169,7 +169,7 @@ String NativeEvent::get_tag(const String &p_key) {
169169
sentry_value_t tags = sentry_value_get_by_key(native_event, "tags");
170170
if (!sentry_value_is_null(tags)) {
171171
sentry_value_t value = sentry_value_get_by_key(tags, p_key.utf8());
172-
return String(sentry_value_as_string(value));
172+
return String::utf8(sentry_value_as_string(value));
173173
}
174174
return String();
175175
}

0 commit comments

Comments
 (0)