Skip to content

Commit

Permalink
(RGUI) Sanitise menu sublabels
Browse files Browse the repository at this point in the history
  • Loading branch information
jdgleaver committed Feb 19, 2019
1 parent 3cc17a6 commit 834f1c1
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 22 deletions.
4 changes: 3 additions & 1 deletion menu/cbs/menu_cbs_sublabel.c
Original file line number Diff line number Diff line change
Expand Up @@ -776,7 +776,9 @@ static int action_bind_sublabel_netplay_room(
{
strlcat(buf, " ", sizeof(buf));
strlcat(buf, list->elems[i].data, sizeof(buf));
strlcat(buf, "\n", sizeof(buf));
/* Never terminate a UI string with a newline */
if (i != list->size - 1)
strlcat(buf, "\n", sizeof(buf));
}
snprintf(s, len,
"RetroArch: %s (%s)\nCore: %s (%s)\nSubsystem: %s\nGames:\n%s",
Expand Down
69 changes: 48 additions & 21 deletions menu/drivers/rgui.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@
#define RGUI_TERM_WIDTH(width) (((width - RGUI_TERM_START_X(width) - RGUI_TERM_START_X(width)) / (FONT_WIDTH_STRIDE)))
#define RGUI_TERM_HEIGHT(width, height) (((height - RGUI_TERM_START_Y(height) - RGUI_TERM_START_X(width)) / (FONT_HEIGHT_STRIDE)) - 1)

#define TICKER_SPACER " | "

typedef struct
{
uint32_t hover_color;
Expand Down Expand Up @@ -1464,7 +1466,7 @@ static void rgui_frame(void *data, video_frame_info_t *video_info)
static void rgui_render(void *data, bool is_idle)
{
menu_animation_ctx_ticker_t ticker;
static const char ticker_spacer[] = " | ";
static const char* const ticker_spacer = TICKER_SPACER;
unsigned x, y;
size_t i, end, fb_pitch, old_start;
unsigned fb_width, fb_height;
Expand Down Expand Up @@ -1797,29 +1799,54 @@ static void rgui_render(void *data, bool is_idle)
{
if (!string_is_empty(entry.sublabel))
{
char *sublabel = NULL;
char sublabel[255];
char sublabel_buf[255];
sublabel_buf[0] = '\0';

sublabel = menu_entry_get_sublabel(&entry);

ticker.s = sublabel_buf;
ticker.len = core_name_len;
ticker.str = sublabel;
ticker.selected = true;

menu_animation_ticker(&ticker);
static const char* const sublabel_spacer = TICKER_SPACER;
struct string_list *list = NULL;
size_t line_index;
bool prev_line_empty = true;

if (rgui_framebuf_data)
blit_line(
RGUI_TERM_START_X(fb_width) + FONT_WIDTH_STRIDE,
(RGUI_TERM_HEIGHT(fb_width, fb_height) * FONT_HEIGHT_STRIDE) +
RGUI_TERM_START_Y(fb_height) + 2, sublabel_buf, rgui->colors.hover_color);

if (!string_is_empty(sublabel))
free(sublabel);
sublabel[0] = '\0';
sublabel_buf[0] = '\0';

show_core_name = false;
/* Sanitise sublabel
* > Replace newline characters with standard delimiter
* > Remove whitespace surrounding each sublabel line */
list = string_split(entry.sublabel, "\n");
if (list)
{
for (line_index = 0; line_index < list->size; line_index++)
{
const char *line = string_trim_whitespace(list->elems[line_index].data);
if (!string_is_empty(line))
{
if (!prev_line_empty)
strlcat(sublabel, sublabel_spacer, sizeof(sublabel));
strlcat(sublabel, line, sizeof(sublabel));
prev_line_empty = false;
}
}

string_list_free(list);

if (!string_is_empty(sublabel))
{
ticker.s = sublabel_buf;
ticker.len = core_name_len;
ticker.str = sublabel;
ticker.selected = true;

menu_animation_ticker(&ticker);

if (rgui_framebuf_data)
blit_line(
RGUI_TERM_START_X(fb_width) + FONT_WIDTH_STRIDE,
(RGUI_TERM_HEIGHT(fb_width, fb_height) * FONT_HEIGHT_STRIDE) +
RGUI_TERM_START_Y(fb_height) + 2, sublabel_buf, rgui->colors.hover_color);

show_core_name = false;
}
}
}
}

Expand Down

0 comments on commit 834f1c1

Please sign in to comment.