From 941dac27b3fb332ff41f8e7c50037b9dc4654485 Mon Sep 17 00:00:00 2001 From: Steve Checkoway Date: Sun, 17 Sep 2006 05:14:20 +0000 Subject: [PATCH] Fix memory leak and possible buffer overflow. CFStringGetMaximumSizeForEncoding() doesn't mention anything about NULL terminators so add one to protect against that. --- stepmania/src/RageUtil_CharConversions.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/stepmania/src/RageUtil_CharConversions.cpp b/stepmania/src/RageUtil_CharConversions.cpp index 9dbf12eeff..2a91924cea 100644 --- a/stepmania/src/RageUtil_CharConversions.cpp +++ b/stepmania/src/RageUtil_CharConversions.cpp @@ -106,15 +106,13 @@ static bool ConvertFromCP( RString &sText, int iCodePage ) return false; const size_t size = CFStringGetMaximumSizeForEncoding( CFStringGetLength(old), kCFStringEncodingUTF8 ); - char *buf = new char[size]; - if( !CFStringGetCString(old, buf, size, kCFStringEncodingUTF8) ) - { - delete[] buf; - return false; - } + char *buf = new char[size+1]; + buf[0] = '\0'; + bool result = CFStringGetCString( old, buf, size, kCFStringEncodingUTF8 ); sText = buf; delete[] buf; - return true; + CFRelease( old ); + return result; } static bool AttemptEnglishConversion( RString &sText ) { return ConvertFromCP( sText, 1252 ); }