dep/rcheevos: Fix silent URL truncation in new functions

This commit is contained in:
Stenzek
2026-01-24 01:09:47 +10:00
parent c41eeda026
commit e26ad17fea

View File

@@ -638,11 +638,11 @@ static int rc_client_get_image_url(char buffer[], size_t buffer_size, int image_
result = rc_api_init_fetch_image_request_hosted(&request, &image_request, NULL);
if (result == RC_OK)
{
const size_t url_length = strlen(request.url);
if (url_length >= buffer_size)
const size_t len = strlen(request.url);
if (len >= buffer_size)
result = RC_INSUFFICIENT_BUFFER;
else
memcpy(buffer, request.url, url_length + 1);
memcpy(buffer, request.url, len + 1);
}
rc_api_destroy_request(&request);
@@ -904,7 +904,11 @@ int rc_client_user_get_image_url(const rc_client_user_t* user, char buffer[], si
return RC_INVALID_STATE;
if (user->avatar_url) {
snprintf(buffer, buffer_size, "%s", user->avatar_url);
const size_t len = strlen(user->avatar_url);
if (len >= buffer_size)
return RC_INSUFFICIENT_BUFFER;
memcpy(buffer, user->avatar_url, len + 1);
return RC_OK;
}
@@ -3520,7 +3524,11 @@ int rc_client_game_get_image_url(const rc_client_game_t* game, char buffer[], si
return RC_INVALID_STATE;
if (game->badge_url) {
snprintf(buffer, buffer_size, "%s", game->badge_url);
const size_t len = strlen(game->badge_url);
if (len >= buffer_size)
return RC_INSUFFICIENT_BUFFER;
memcpy(buffer, game->badge_url, len + 1);
return RC_OK;
}
@@ -4342,12 +4350,20 @@ int rc_client_achievement_get_image_url(const rc_client_achievement_t* achieveme
return rc_client_get_image_url(buffer, buffer_size, image_type, "00000");
if (image_type == RC_IMAGE_TYPE_ACHIEVEMENT && achievement->badge_url) {
snprintf(buffer, buffer_size, "%s", achievement->badge_url);
const size_t len = strlen(achievement->badge_url);
if (len >= buffer_size)
return RC_INSUFFICIENT_BUFFER;
memcpy(buffer, achievement->badge_url, len + 1);
return RC_OK;
}
if (image_type == RC_IMAGE_TYPE_ACHIEVEMENT_LOCKED && achievement->badge_locked_url) {
snprintf(buffer, buffer_size, "%s", achievement->badge_locked_url);
const size_t len = strlen(achievement->badge_locked_url);
if (len >= buffer_size)
return RC_INSUFFICIENT_BUFFER;
memcpy(buffer, achievement->badge_locked_url, len + 1);
return RC_OK;
}