From 338723bc31969050949429d2d2da286ae7a706be Mon Sep 17 00:00:00 2001 From: Brad Parker Date: Sun, 15 Oct 2017 00:39:55 -0400 Subject: [PATCH] fix some null pointer accesses with empty strings --- libretro-common/encodings/encoding_utf.c | 7 +++++++ menu/drivers/xmb.c | 6 ++++-- menu/widgets/menu_entry.c | 4 +++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/libretro-common/encodings/encoding_utf.c b/libretro-common/encodings/encoding_utf.c index 8220361124..8c9f619094 100644 --- a/libretro-common/encodings/encoding_utf.c +++ b/libretro-common/encodings/encoding_utf.c @@ -154,6 +154,9 @@ size_t utf8cpy(char *d, size_t d_len, const char *s, size_t chars) const uint8_t *sb = (const uint8_t*)s; const uint8_t *sb_org = sb; + if (!s) + return 0; + while (*sb && chars-- > 0) { sb++; @@ -189,6 +192,10 @@ const char *utf8skip(const char *str, size_t chars) size_t utf8len(const char *string) { size_t ret = 0; + + if (!string) + return 0; + while (*string) { if ((*string & 0xC0) != 0x80) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index a34bab108b..c9c7648f58 100755 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -2392,7 +2392,8 @@ static int xmb_draw_item( ticker_limit = 70; } - ticker_str = menu_entry_get_rich_label(entry); + if (!string_is_empty(entry->path)) + ticker_str = menu_entry_get_rich_label(entry); ticker.s = tmp; ticker.len = ticker_limit; @@ -2400,7 +2401,8 @@ static int xmb_draw_item( ticker.str = ticker_str; ticker.selected = (i == current); - menu_animation_ticker(&ticker); + if (ticker.str) + menu_animation_ticker(&ticker); label_offset = xmb->margins_label_top; if (i == current && width > 320 && height > 240 diff --git a/menu/widgets/menu_entry.c b/menu/widgets/menu_entry.c index 381abd9e41..3e268506fc 100644 --- a/menu/widgets/menu_entry.c +++ b/menu/widgets/menu_entry.c @@ -123,7 +123,9 @@ char *menu_entry_get_rich_label(menu_entry_t *entry) return NULL; if (!string_is_empty(entry->rich_label)) return strdup(entry->rich_label); - return strdup(entry->path); + if (!string_is_empty(entry->path)) + return strdup(entry->path); + return NULL; } char *menu_entry_get_sublabel(menu_entry_t *entry)