mirror of
https://github.com/libretro/RetroArch
synced 2025-02-19 21:40:49 +00:00
guard against overflows in Arabic font code, fixes #7508
This commit is contained in:
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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user