diff --git a/CHANGELOG.md b/CHANGELOG.md index 43103504d..84f5169a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ **Fixes**: - Reduce the scope of the proguard rules in the NDK package to local namespaces. ([#1250](https://github.com/getsentry/sentry-native/pull/1250)) +- Close the file and return 0 on success when writing raw envelopes. ([#1260](https://github.com/getsentry/sentry-native/pull/1260)) **Docs**: diff --git a/src/sentry_envelope.c b/src/sentry_envelope.c index ecce27667..137115c86 100644 --- a/src/sentry_envelope.c +++ b/src/sentry_envelope.c @@ -508,9 +508,10 @@ sentry_envelope_write_to_path( } if (envelope->is_raw) { - return envelope->contents.raw.payload_len - != sentry__filewriter_write(fw, envelope->contents.raw.payload, - envelope->contents.raw.payload_len); + size_t rv = sentry__filewriter_write(fw, envelope->contents.raw.payload, + envelope->contents.raw.payload_len); + sentry__filewriter_free(fw); + return rv != 0; } sentry_jsonwriter_t *jw = sentry__jsonwriter_new_fw(fw); diff --git a/tests/unit/test_envelopes.c b/tests/unit/test_envelopes.c index 2742d3c90..856ee166b 100644 --- a/tests/unit/test_envelopes.c +++ b/tests/unit/test_envelopes.c @@ -268,3 +268,30 @@ SENTRY_TEST(write_envelope_to_invalid_path) sentry_envelope_free(envelope); sentry_close(); } + +SENTRY_TEST(write_raw_envelope_to_file) +{ + sentry_envelope_t *envelope = create_test_envelope(); + const char *test_file_str = SENTRY_TEST_PATH_PREFIX "sentry_test_envelope"; + sentry_path_t *test_file_path = sentry__path_from_str(test_file_str); + TEST_CHECK_INT_EQUAL( + sentry_envelope_write_to_file(envelope, test_file_str), 0); + + sentry_envelope_t *raw_envelope + = sentry__envelope_from_path(test_file_path); + TEST_CHECK_INT_EQUAL( + sentry_envelope_write_to_file(raw_envelope, test_file_str), 0); + + size_t test_file_size; + char *test_file_content + = sentry__path_read_to_buffer(test_file_path, &test_file_size); + TEST_CHECK_INT_EQUAL(test_file_size, strlen(SERIALIZED_ENVELOPE_STR)); + TEST_CHECK_STRING_EQUAL(test_file_content, SERIALIZED_ENVELOPE_STR); + TEST_CHECK_INT_EQUAL(sentry__path_remove(test_file_path), 0); + + sentry_free(test_file_content); + sentry__path_free(test_file_path); + sentry_envelope_free(envelope); + sentry_envelope_free(raw_envelope); + sentry_close(); +} diff --git a/tests/unit/tests.inc b/tests/unit/tests.inc index 779109630..202b448a8 100644 --- a/tests/unit/tests.inc +++ b/tests/unit/tests.inc @@ -160,3 +160,4 @@ XX(value_user) XX(value_wrong_type) XX(write_envelope_to_file_null) XX(write_envelope_to_invalid_path) +XX(write_raw_envelope_to_file)