(playlist.c) -

* playlist_get_old_format_metadata_value - now returns size_t
* fix bug where string copy was being made with strdup before
anything got written to the string
This commit is contained in:
LibretroAdmin 2025-01-12 22:32:42 +01:00
parent e84ea6082c
commit 955eeed31a

View File

@ -2575,21 +2575,18 @@ static bool JSONObjectMemberHandler(void *context, const char *pValue, size_t le
return true; return true;
} }
static void playlist_get_old_format_metadata_value( static size_t playlist_get_old_format_metadata_value(
char *metadata_line, char *value, size_t len) char *metadata_line, char *s, size_t len)
{ {
char *end = NULL; char *end = NULL;
char *start = strchr(metadata_line, '\"'); char *start = strchr(metadata_line, '\"');
if (!start) if (!start)
return; return 0;
start++; start++;
if (!(end = strchr(start, '\"'))) if (!(end = strchr(start, '\"')))
return; return 0;
*end = '\0'; *end = '\0';
strlcpy(value, start, len); return strlcpy(s, start, len);
} }
static bool playlist_read_file(playlist_t *playlist) static bool playlist_read_file(playlist_t *playlist)
@ -2805,16 +2802,14 @@ static bool playlist_read_file(playlist_t *playlist)
line_buf[2], line_buf[2],
STRLEN_CONST("label_display_mode")) == 0) STRLEN_CONST("label_display_mode")) == 0)
{ {
unsigned display_mode; char display_mode_str[4];
char display_mode_str[4] = {0}; if (playlist_get_old_format_metadata_value(
line_buf[2], display_mode_str, sizeof(display_mode_str)) > 0)
playlist_get_old_format_metadata_value( {
line_buf[2], display_mode_str, sizeof(display_mode_str)); unsigned display_mode = string_to_unsigned(display_mode_str);
if (display_mode <= LABEL_DISPLAY_MODE_KEEP_REGION_AND_DISC_INDEX)
display_mode = string_to_unsigned(display_mode_str); playlist->label_display_mode = (enum playlist_label_display_mode)display_mode;
}
if (display_mode <= LABEL_DISPLAY_MODE_KEEP_REGION_AND_DISC_INDEX)
playlist->label_display_mode = (enum playlist_label_display_mode)display_mode;
} }
/* Get thumbnail modes */ /* Get thumbnail modes */
@ -2825,32 +2820,34 @@ static bool playlist_read_file(playlist_t *playlist)
line_buf[3], line_buf[3],
STRLEN_CONST("thumbnail_mode")) == 0) STRLEN_CONST("thumbnail_mode")) == 0)
{ {
char *tok, *save; char thumbnail_mode_str[8];
char thumbnail_mode_str[8] = {0};
char *thumbnail_mode_str_cpy = strdup(thumbnail_mode_str);
playlist_get_old_format_metadata_value( if (playlist_get_old_format_metadata_value(
line_buf[3], thumbnail_mode_str, line_buf[3], thumbnail_mode_str,
sizeof(thumbnail_mode_str)); sizeof(thumbnail_mode_str)) > 0)
if ((tok = strtok_r(thumbnail_mode_str_cpy, "|", &save)))
{ {
char *elem0 = strdup(tok); char *tok, *save;
if ((tok = strtok_r(NULL, "|", &save))) char *thumbnail_mode_str_cpy = strdup(thumbnail_mode_str);
{
/* Right thumbnail mode */
unsigned thumbnail_mode = string_to_unsigned(elem0);
if (thumbnail_mode <= PLAYLIST_THUMBNAIL_MODE_LOGOS)
playlist->right_thumbnail_mode = (enum playlist_thumbnail_mode)thumbnail_mode;
/* Left thumbnail mode */ if ((tok = strtok_r(thumbnail_mode_str_cpy, "|", &save)))
thumbnail_mode = string_to_unsigned(tok); {
if (thumbnail_mode <= PLAYLIST_THUMBNAIL_MODE_LOGOS) char *elem0 = strdup(tok);
playlist->left_thumbnail_mode = (enum playlist_thumbnail_mode)thumbnail_mode; if ((tok = strtok_r(NULL, "|", &save)))
{
/* Right thumbnail mode */
unsigned thumbnail_mode = string_to_unsigned(elem0);
if (thumbnail_mode <= PLAYLIST_THUMBNAIL_MODE_LOGOS)
playlist->right_thumbnail_mode = (enum playlist_thumbnail_mode)thumbnail_mode;
/* Left thumbnail mode */
thumbnail_mode = string_to_unsigned(tok);
if (thumbnail_mode <= PLAYLIST_THUMBNAIL_MODE_LOGOS)
playlist->left_thumbnail_mode = (enum playlist_thumbnail_mode)thumbnail_mode;
}
free(elem0);
} }
free(elem0); free(thumbnail_mode_str_cpy);
} }
free(thumbnail_mode_str_cpy);
} }
/* Get sort_mode */ /* Get sort_mode */
@ -2861,16 +2858,14 @@ static bool playlist_read_file(playlist_t *playlist)
line_buf[4], line_buf[4],
STRLEN_CONST("sort_mode")) == 0) STRLEN_CONST("sort_mode")) == 0)
{ {
unsigned sort_mode; char sort_mode_str[4];
char sort_mode_str[4] = {0}; if (playlist_get_old_format_metadata_value(
line_buf[4], sort_mode_str, sizeof(sort_mode_str)) > 0)
playlist_get_old_format_metadata_value( {
line_buf[4], sort_mode_str, sizeof(sort_mode_str)); unsigned sort_mode = string_to_unsigned(sort_mode_str);
if (sort_mode <= PLAYLIST_SORT_MODE_OFF)
sort_mode = string_to_unsigned(sort_mode_str); playlist->sort_mode = (enum playlist_sort_mode)sort_mode;
}
if (sort_mode <= PLAYLIST_SORT_MODE_OFF)
playlist->sort_mode = (enum playlist_sort_mode)sort_mode;
} }
/* All metadata parsed -> end of file */ /* All metadata parsed -> end of file */