Skip to content

Commit

Permalink
sjis output_len was off by 1
Browse files Browse the repository at this point in the history
  • Loading branch information
bbbradsmith committed Apr 27, 2024
1 parent a94c43d commit f31fd88
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 8 deletions.
2 changes: 1 addition & 1 deletion core/nsf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ inline static uint8 nsfe_nsf_shared_bit(const NSFCore* core, uint32 nsfe_fcc, ui

// from shift_jis.cpp
bool valid_utf8(const uint8* s); // true if s is value unicode
void sjis_to_utf8(const uint8* sjis, uint16 unmapped, uint8* output, uint32 output_len);
void sjis_to_utf8(const uint8* sjis, uint16 unmapped, uint8* output, uint32 output_size);

inline const char* legacy_string(const NSFCore* core, const uint8* data)
{
Expand Down
14 changes: 7 additions & 7 deletions core/shift_jis.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@ bool valid_utf8(const uint8* s) // true if s is valid UTF-8
// CP932_E0_EE - Double byte group E000-EEFF
// CP932_FA_FC - Double byte group FA00-FCFF

void sjis_to_utf8(const uint8* sjis, uint16 unmapped, uint8* output, uint32 output_len)
void sjis_to_utf8(const uint8* sjis, uint16 unmapped, uint8* output, uint32 output_size)
{
uint32 db = 0;
uint32 pos = 0;
while (*sjis && pos < output_len)
while (*sjis && pos < (output_size-1))
{
uint16 unicode = 0;
uint8 c = *sjis;
Expand Down Expand Up @@ -77,14 +77,14 @@ void sjis_to_utf8(const uint8* sjis, uint16 unmapped, uint8* output, uint32 outp
}
else if (unicode < 0x800)
{
if ((pos+1) >= output_len) break;
if ((pos+1) >= (output_size-1)) break;
output[pos+0] = 0xC0 | ((unicode >> 6) & 0x1F);
output[pos+1] = 0x80 | ((unicode >> 0) & 0x3F);
pos += 2;
}
else //if (unicode < 0x10000)
{
if ((pos+2) >= output_len) break;
if ((pos+2) >= (output_size-1)) break;
output[pos+0] = 0xE0 | ((unicode >> 12) & 0x0F);
output[pos+1] = 0x80 | ((unicode >> 6) & 0x3F);
output[pos+2] = 0x80 | ((unicode >> 0) & 0x3F);
Expand All @@ -106,16 +106,16 @@ bool valid_utf8(const uint8* s)
}

// NOTEXT don't convert, just copy
void sjis_to_utf8(const uint8* sjis, uint16 unmapped, uint8* output, uint32 output_len)
void sjis_to_utf8(const uint8* sjis, uint16 unmapped, uint8* output, uint32 output_size)
{
(void)unmapped;
for (uint32 i=0; i<output_len; ++i)
for (uint32 i=0; i<(output_size-1); ++i)
{
output[i] = *sjis;
if (*sjis == 0) break;
++sjis;
}
output[output_len-1] = 0;
output[output_size-1] = 0;
}

#endif

0 comments on commit f31fd88

Please sign in to comment.