diff --git a/Core/Dialog/PSPOskDialog.cpp b/Core/Dialog/PSPOskDialog.cpp index c867e47ec1..518ca2797a 100755 --- a/Core/Dialog/PSPOskDialog.cpp +++ b/Core/Dialog/PSPOskDialog.cpp @@ -161,12 +161,13 @@ void PSPOskDialog::ConvertUCS2ToUTF8(std::string& _string, const PSPPointer _string = L""; return; } - const size_t maxLength = 2048; - wchar_t stringBuffer[maxLength]; + const size_t maxLength = 2047; + wchar_t stringBuffer[maxLength + 1]; wchar_t *string = stringBuffer; - auto input = em_address; + u16_le *input = &em_address[0]; int c; - u32 count = 0; - while ((c = *input++) != 0) - { - if ( !(++count >= maxLength) ) - *string++ = c; - else - break; - } + while ((c = *input++) != 0 && string < stringBuffer + maxLength) + *string++ = c; *string++ = '\0'; _string = stringBuffer; }