2022-04-02 01:21:55 +00:00
|
|
|
#include "sentry_json.h"
|
|
|
|
#include "sentry_path.h"
|
|
|
|
#include "sentry_testsupport.h"
|
|
|
|
#include "sentry_value.h"
|
2022-08-16 00:48:53 +00:00
|
|
|
|
2022-04-02 01:21:55 +00:00
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
static void
|
|
|
|
parse_json_roundtrip(const sentry_path_t *path)
|
|
|
|
{
|
|
|
|
// printf("Running %" SENTRY_PATH_PRI "\n", path->path);
|
|
|
|
size_t buf_len = 0;
|
|
|
|
char *buf = sentry__path_read_to_buffer(path, &buf_len);
|
|
|
|
if (!buf) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// parse the incoming json
|
|
|
|
sentry_value_t value = sentry__value_from_json(buf, buf_len);
|
|
|
|
sentry_free(buf);
|
|
|
|
|
|
|
|
sentry_jsonwriter_t *jw = sentry__jsonwriter_new(NULL);
|
|
|
|
sentry__jsonwriter_write_value(jw, value);
|
|
|
|
size_t serialized1_len = 0;
|
|
|
|
char *serialized1 = sentry__jsonwriter_into_string(jw, &serialized1_len);
|
|
|
|
sentry_value_decref(value);
|
|
|
|
|
|
|
|
value = sentry__value_from_json(serialized1, serialized1_len);
|
|
|
|
|
|
|
|
jw = sentry__jsonwriter_new(NULL);
|
|
|
|
sentry__jsonwriter_write_value(jw, value);
|
|
|
|
size_t serialized2_len = 0;
|
|
|
|
char *serialized2 = sentry__jsonwriter_into_string(jw, &serialized2_len);
|
|
|
|
sentry_value_decref(value);
|
|
|
|
|
|
|
|
TEST_CHECK_STRING_EQUAL(serialized1, serialized2);
|
|
|
|
|
|
|
|
sentry_free(serialized1);
|
|
|
|
sentry_free(serialized2);
|
|
|
|
}
|
|
|
|
|
|
|
|
SENTRY_TEST(fuzz_json)
|
|
|
|
{
|
|
|
|
// skipping this on android because it does not have access to the fixtures
|
|
|
|
#if defined(SENTRY_PLATFORM_ANDROID)
|
|
|
|
SKIP_TEST();
|
|
|
|
#else
|
|
|
|
sentry_path_t *path = sentry__path_from_str(__FILE__);
|
|
|
|
sentry_path_t *dir = sentry__path_dir(path);
|
|
|
|
sentry__path_free(path);
|
|
|
|
path = sentry__path_join_str(dir, "../fuzzing-failures/");
|
|
|
|
sentry__path_free(dir);
|
|
|
|
|
|
|
|
size_t items = 0;
|
|
|
|
const sentry_path_t *p;
|
|
|
|
sentry_pathiter_t *piter = sentry__path_iter_directory(path);
|
|
|
|
while ((p = sentry__pathiter_next(piter)) != NULL) {
|
|
|
|
parse_json_roundtrip(p);
|
|
|
|
items += 1;
|
|
|
|
}
|
|
|
|
TEST_CHECK(items > 0);
|
|
|
|
|
|
|
|
sentry__pathiter_free(piter);
|
|
|
|
sentry__path_free(path);
|
|
|
|
#endif
|
|
|
|
}
|