1
0
mirror of https://github.com/libretro/RetroArch synced 2025-02-19 21:40:49 +00:00

guard against overflows in Arabic font code, fixes

This commit is contained in:
Brad Parker 2019-01-12 17:23:19 -05:00
parent af74ba90db
commit 1b22acd747

@ -802,7 +802,7 @@ static INLINE unsigned font_get_replacement(const char* src, const char* start)
unsigned result = 0;
bool prev_connected = false;
bool next_connected = false;
unsigned char id = (src[0] << 6) | (src[1] & 0x3F);
unsigned char id = ((unsigned char)src[0] << 6) | ((unsigned char)src[1] & 0x3F);
const char* prev1 = src - 2;
const char* prev2 = src - 4;
@ -821,7 +821,7 @@ static INLINE unsigned font_get_replacement(const char* src, const char* start)
unsigned char prev1_id = 0;
if (prev1)
prev1_id = (prev1[0] << 6) | (prev1[1] & 0x3F);
prev1_id = ((unsigned char)prev1[0] << 6) | ((unsigned char)prev1[1] & 0x3F);
if (prev1_id == 0x44)
{
@ -851,7 +851,7 @@ static INLINE unsigned font_get_replacement(const char* src, const char* start)
if ((src[2] & 0xFC) == 0xD8)
{
unsigned char next_id = (src[2] << 6) | (src[3] & 0x3F);
unsigned char next_id = ((unsigned char)src[2] << 6) | ((unsigned char)src[3] & 0x3F);
if (next_id > 0x20 || next_id < 0x50)
next_connected = true;
@ -882,8 +882,13 @@ static char* font_driver_reshape_msg(const char* msg)
{
src--;
while (IS_MBCONT(src))
{
src--;
if (src == (const unsigned char*)msg)
goto end;
}
if (IS_RTL(src) || IS_DIR_NEUTRAL(src))
{
unsigned replacement = font_get_replacement((const char*)src, msg);
@ -945,7 +950,7 @@ static char* font_driver_reshape_msg(const char* msg)
*dst++ = *src++;
}
}
end:
*dst = '\0';
return (char*)buffer;