(rcheevos) Try to use safe versions of strcpy/sprintf where possible

This commit is contained in:
twinaphex 2020-08-23 15:15:34 +02:00
parent b965bb5c48
commit c10d1922ed

View File

@ -212,7 +212,7 @@ void rcheevos_log(const char *fmt, ...)
} }
#endif #endif
static void rcheevos_get_user_agent(char* buffer) static void rcheevos_get_user_agent(char *buffer, size_t len)
{ {
struct retro_system_info *system = runloop_get_libretro_system_info(); struct retro_system_info *system = runloop_get_libretro_system_info();
const char* scan; const char* scan;
@ -224,7 +224,7 @@ static void rcheevos_get_user_agent(char* buffer)
int major, minor; int major, minor;
char tmp[64]; char tmp[64];
ptr = rcheevos_locals.user_agent_prefix + sprintf(rcheevos_locals.user_agent_prefix, "RetroArch/%s", PACKAGE_VERSION); ptr = rcheevos_locals.user_agent_prefix + snprintf(rcheevos_locals.user_agent_prefix, sizeof(rcheevos_locals.user_agent_prefix), "RetroArch/%s", PACKAGE_VERSION);
if (frontend && frontend->get_os) if (frontend && frontend->get_os)
{ {
@ -233,7 +233,7 @@ static void rcheevos_get_user_agent(char* buffer)
} }
} }
ptr = buffer + sprintf(buffer, "%s", rcheevos_locals.user_agent_prefix); ptr = buffer + snprintf(buffer, len, "%s", rcheevos_locals.user_agent_prefix);
if (system && !string_is_empty(system->library_name)) if (system && !string_is_empty(system->library_name))
{ {
@ -320,15 +320,15 @@ static void rcheevos_filter_url_param(char* url, char* param)
static void rcheevos_log_url(const char* api, const char* url) static void rcheevos_log_url(const char* api, const char* url)
{ {
#ifdef CHEEVOS_LOG_URLS #ifdef CHEEVOS_LOG_URLS
#ifdef CHEEVOS_LOG_PASSWORD #ifdef CHEEVOS_LOG_PASSWORD
CHEEVOS_LOG(RCHEEVOS_TAG "%s: %s\n", api, url); CHEEVOS_LOG(RCHEEVOS_TAG "%s: %s\n", api, url);
#else #else
char copy[256]; char copy[256];
strlcpy(copy, url, sizeof(copy)); strlcpy(copy, url, sizeof(copy));
rcheevos_filter_url_param(copy, "p"); rcheevos_filter_url_param(copy, "p");
rcheevos_filter_url_param(copy, "t"); rcheevos_filter_url_param(copy, "t");
CHEEVOS_LOG(RCHEEVOS_TAG "%s: %s\n", api, copy); CHEEVOS_LOG(RCHEEVOS_TAG "%s: %s\n", api, copy);
#endif #endif
#else #else
(void)api; (void)api;
(void)url; (void)url;
@ -425,7 +425,7 @@ static retro_time_t rcheevos_async_send_rich_presence(
{ {
rcheevos_log_post_url("rc_url_ping", url, post_data); rcheevos_log_post_url("rc_url_ping", url, post_data);
rcheevos_get_user_agent(request->user_agent); rcheevos_get_user_agent(request->user_agent, sizeof(request->user_agent));
task_push_http_post_transfer_with_user_agent(url, post_data, true, "POST", request->user_agent, NULL, NULL); task_push_http_post_transfer_with_user_agent(url, post_data, true, "POST", request->user_agent, NULL, NULL);
} }
} }
@ -822,7 +822,7 @@ static void rcheevos_award(rcheevos_cheevo_t* cheevo, int mode)
? 1 : 0; ? 1 : 0;
request->success_message = "Awarded achievement"; request->success_message = "Awarded achievement";
request->failure_message = "Error awarding achievement"; request->failure_message = "Error awarding achievement";
rcheevos_get_user_agent(request->user_agent); rcheevos_get_user_agent(request->user_agent, sizeof(request->user_agent));
rcheevos_async_award_achievement(request); rcheevos_async_award_achievement(request);
} }
@ -974,7 +974,7 @@ static void rcheevos_lboard_submit(rcheevos_lboard_t* lboard)
request->value = lboard->last_value; request->value = lboard->last_value;
request->success_message = "Submitted leaderboard"; request->success_message = "Submitted leaderboard";
request->failure_message = "Error submitting leaderboard"; request->failure_message = "Error submitting leaderboard";
rcheevos_get_user_agent(request->user_agent); rcheevos_get_user_agent(request->user_agent, sizeof(request->user_agent));
rcheevos_async_submit_lboard(request); rcheevos_async_submit_lboard(request);
} }
} }
@ -1581,7 +1581,7 @@ static int rcheevos_iterate(rcheevos_coro_t* coro)
if (coro->gameid == 0) if (coro->gameid == 0)
{ {
CHEEVOS_LOG(RCHEEVOS_TAG "this game doesn't feature achievements\n"); CHEEVOS_LOG(RCHEEVOS_TAG "this game doesn't feature achievements\n");
strcpy(rcheevos_locals.hash, "N/A"); strlcpy(rcheevos_locals.hash, "N/A", sizeof(rcheevos_locals.hash));
rcheevos_pause_hardcore(); rcheevos_pause_hardcore();
CORO_STOP(); CORO_STOP();
} }
@ -2040,7 +2040,7 @@ static int rcheevos_iterate(rcheevos_coro_t* coro)
continue; continue;
} }
rcheevos_get_user_agent(buffer); rcheevos_get_user_agent(buffer, sizeof(buffer));
net_http_connection_set_user_agent(coro->conn, buffer); net_http_connection_set_user_agent(coro->conn, buffer);
coro->http = net_http_new(coro->conn); coro->http = net_http_new(coro->conn);