diff --git a/libretro-common/formats/json/rjson.c b/libretro-common/formats/json/rjson.c index ef16fb9b36..44bf9e2a01 100644 --- a/libretro-common/formats/json/rjson.c +++ b/libretro-common/formats/json/rjson.c @@ -24,7 +24,7 @@ #include /* snprintf, vsnprintf */ #include /* va_list */ -#include /* memcpy, strlen */ +#include /* memcpy */ #include /* int64_t */ #include /* malloc, realloc, atof, atoi */ @@ -871,9 +871,9 @@ rjson_t *rjson_open_buffer(const void *buffer, size_t size) return json; } -rjson_t *rjson_open_string(const char *string) +rjson_t *rjson_open_string(const char *string, size_t len) { - return rjson_open_buffer(string, strlen(string)); + return rjson_open_buffer(string, len); } static int _rjson_stream_io(void* buf, int len, void *user) @@ -1123,7 +1123,7 @@ enum rjson_type rjson_parse(rjson_t *json, void* context, } } -bool rjson_parse_quick(const char *string, void* context, char option_flags, +bool rjson_parse_quick(const char *string, size_t len, void* context, char option_flags, bool (*object_member_handler)(void *context, const char *str, size_t len), bool (*string_handler )(void *context, const char *str, size_t len), bool (*number_handler )(void *context, const char *str, size_t len), @@ -1138,7 +1138,7 @@ bool rjson_parse_quick(const char *string, void* context, char option_flags, const char *user_data[2]; rjson_t json; user_data[0] = string; - user_data[1] = string + strlen(string); + user_data[1] = string + len; _rjson_setup(&json, _rjson_buffer_io, (void*)user_data, sizeof(json.input_buf)); rjson_set_options(&json, option_flags); if (rjson_parse(&json, context, diff --git a/libretro-common/include/formats/rjson.h b/libretro-common/include/formats/rjson.h index 1a58397539..38ef6fd287 100644 --- a/libretro-common/include/formats/rjson.h +++ b/libretro-common/include/formats/rjson.h @@ -69,7 +69,7 @@ struct RFILE; rjson_t *rjson_open_stream(struct intfstream_internal *stream); rjson_t *rjson_open_rfile(struct RFILE *rfile); rjson_t *rjson_open_buffer(const void *buffer, size_t size); -rjson_t *rjson_open_string(const char *string); +rjson_t *rjson_open_string(const char *string, size_t len); rjson_t *rjson_open_user(rjson_io_t io, void *user_data, int io_block_size); /* Free the parser instance created with rjson_open_* */ @@ -157,7 +157,7 @@ enum rjson_type rjson_parse(rjson_t *json, void* context, /* A simpler interface to parse a JSON in memory. This will avoid any memory * allocations unless the document contains strings longer than 512 characters. * In the error handler, error will be "" if any of the other handlers aborted. */ -bool rjson_parse_quick(const char *string, void* context, char option_flags, +bool rjson_parse_quick(const char *string, size_t len, void* context, char option_flags, bool (*object_member_handler)(void *context, const char *str, size_t len), bool (*string_handler )(void *context, const char *str, size_t len), bool (*number_handler )(void *context, const char *str, size_t len), diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 2044ef37ea..b558cd2cfa 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -6048,10 +6048,9 @@ static void netplay_refresh_rooms_cb(retro_task_t *task, void *task_data, { int room_count; - netplay_rooms_parse(room_data); + netplay_rooms_parse(room_data, strlen(room_data)); - room_count = netplay_rooms_get_count(); - if (room_count > 0) + if ((room_count = netplay_rooms_get_count()) > 0) { net_st->room_list = (struct netplay_room*)calloc(room_count, sizeof(*net_st->room_list)); diff --git a/network/discord.c b/network/discord.c index b0a361319d..43c1561949 100644 --- a/network/discord.c +++ b/network/discord.c @@ -169,17 +169,15 @@ static void handle_discord_join_cb(retro_task_t *task, void *task_data, if (data->status != 200) goto done; - room_data = (char*)malloc(data->len + 1); - if (!room_data) + if (!(room_data = (char*)malloc(data->len + 1))) goto done; memcpy(room_data, data->data, data->len); room_data[data->len] = '\0'; - netplay_rooms_parse(room_data); + netplay_rooms_parse(room_data, strlen(room_data)); free(room_data); - room = netplay_room_get(0); - if (room) + if ((room = netplay_room_get(0))) { if (room->host_method == NETPLAY_HOST_METHOD_MITM) snprintf(hostname, sizeof(hostname), "%s|%d|%s", @@ -204,14 +202,15 @@ done: static void handle_discord_join(const char *secret) { + int room_id; char url[512]; - discord_state_t *discord_st = &discord_state_st; - int room_id = (int)strtol(secret, NULL, 10); - if (room_id) + if ((room_id = (int)strtol(secret, NULL, 10))) { - snprintf(discord_st->peer_party_id, sizeof(discord_st->peer_party_id), - "%d", room_id); + discord_state_t *discord_st = &discord_state_st; + snprintf(discord_st->peer_party_id, + sizeof(discord_st->peer_party_id), + "%d", room_id); strlcpy(url, FILE_PATH_LOBBY_LIBRETRO_URL, sizeof(url)); strlcat(url, discord_st->peer_party_id, sizeof(url)); diff --git a/network/netplay/netplay.h b/network/netplay/netplay.h index 1d99885aa5..7e823d1d78 100644 --- a/network/netplay/netplay.h +++ b/network/netplay/netplay.h @@ -265,7 +265,7 @@ bool netplay_decode_hostname(const char *hostname, char *address, unsigned *port, char *session, size_t len); bool netplay_is_lan_address(struct sockaddr_in *addr); -int netplay_rooms_parse(const char *buf); +int netplay_rooms_parse(const char *buf, size_t len); int netplay_rooms_get_count(void); struct netplay_room *netplay_room_get(int index); void netplay_rooms_free(void); diff --git a/network/netplay/netplay_room_parse.c b/network/netplay/netplay_room_parse.c index f8424c2318..6922e3e91f 100644 --- a/network/netplay/netplay_room_parse.c +++ b/network/netplay/netplay_room_parse.c @@ -285,7 +285,7 @@ void netplay_rooms_free(void) net_st->rooms_data = NULL; } -int netplay_rooms_parse(const char *buf) +int netplay_rooms_parse(const char *buf, size_t len) { struct netplay_json_context ctx; net_driver_state_t *net_st = networking_state_get_ptr(); @@ -300,7 +300,7 @@ int netplay_rooms_parse(const char *buf) net_st->rooms_data = (struct netplay_rooms*) calloc(1, sizeof(*net_st->rooms_data)); - rjson_parse_quick(buf, &ctx, 0, + rjson_parse_quick(buf, len, &ctx, 0, netplay_json_object_member, netplay_json_string, netplay_json_number,