From 537af8d8663a0e343930a06f07b8478b54812011 Mon Sep 17 00:00:00 2001 From: Jason Felds Date: Sat, 26 Sep 2015 21:03:46 -0400 Subject: [PATCH] Remember to fill in new char's. ...we seriously need to use a standard . *glares at Yaniel* --- src/RageSoundReader_WAV.cpp | 1 + src/RageUtil.cpp | 18 ++++++++++----- src/archutils/Win32/CrashHandlerChild.cpp | 23 +++++++++++-------- .../Win32/CrashHandlerNetworking.cpp | 1 + src/archutils/Win32/ErrorStrings.cpp | 3 ++- 5 files changed, 30 insertions(+), 16 deletions(-) diff --git a/src/RageSoundReader_WAV.cpp b/src/RageSoundReader_WAV.cpp index f73c7e3100..a71c3bccec 100644 --- a/src/RageSoundReader_WAV.cpp +++ b/src/RageSoundReader_WAV.cpp @@ -455,6 +455,7 @@ RString ReadString( RageFileBasic &f, int iSize, RString &sError ) return RString(); char *buf = new char[iSize]; + std::fill(buf, buf + iSize, '\0'); FileReading::ReadBytes( f, buf, iSize, sError ); RString ret(buf); delete [] buf; diff --git a/src/RageUtil.cpp b/src/RageUtil.cpp index 93ec33c5dc..beb89d0d3b 100644 --- a/src/RageUtil.cpp +++ b/src/RageUtil.cpp @@ -469,6 +469,7 @@ RString vssprintf( const char *szFormat, va_list argList ) va_end(tmp); char *buf = new char[iNeeded + 1]; + std::fill(buf, buf + iNeeded + 1, '\0'); vsnprintf( buf, iNeeded+1, szFormat, argList ); RString ret(buf); delete [] buf; @@ -477,22 +478,27 @@ RString vssprintf( const char *szFormat, va_list argList ) int iChars = FMT_BLOCK_SIZE; int iTry = 1; - char *buf = new char[iChars]; for (;;) { // Grow more than linearly (e.g. 512, 1536, 3072, etc) + char *buf = new char[iChars]; + std::fill(buf, buf + iChars, '\0'); int used = vsnprintf( buf, iChars - 1, szFormat, argList ); if ( used == -1 ) { iChars += ( ++iTry * FMT_BLOCK_SIZE ); - delete [] buf; - continue; + } + else + { + /* OK */ + sStr.assign(buf, used); } - /* OK */ - sStr.assign( buf, used ); delete [] buf; - break; + if (used != -1) + { + break; + } } #endif return sStr; diff --git a/src/archutils/Win32/CrashHandlerChild.cpp b/src/archutils/Win32/CrashHandlerChild.cpp index cd92aae30a..1a1c580c1c 100644 --- a/src/archutils/Win32/CrashHandlerChild.cpp +++ b/src/archutils/Win32/CrashHandlerChild.cpp @@ -137,9 +137,8 @@ namespace VDDebugInfo if( dwFileSize == INVALID_FILE_SIZE ) break; - char *buffer = new char[dwFileSize]; - if( buffer == NULL ) - break; + char *buffer = new char[dwFileSize + 1]; + std::fill(buffer, buffer + dwFileSize + 1, '\0' ); DWORD dwActual; int iRet = ReadFile(h, buffer, dwFileSize, &dwActual, NULL); @@ -332,7 +331,8 @@ namespace SymbolLookup return "???"; } RString sName; - char *buffer = new char[iSize]; + char *buffer = new char[iSize + 1]; + std::fill(buffer, buffer + iSize + 1, '\0'); if (!ReadFromParent(iFD, buffer, iSize)) { sName = "???"; @@ -518,7 +518,8 @@ bool ReadCrashDataFromParent( int iFD, CompleteCrashData &Data ) if( !ReadFromParent(iFD, &iSize, sizeof(iSize)) ) return false; - char *buffer = new char[iSize]; + char *buffer = new char[iSize + 1]; + std::fill(buffer, buffer + iSize + 1, '\0'); bool wasReadSuccessful = ReadFromParent(iFD, buffer, iSize); RString tmp = buffer; delete[] buffer; @@ -532,7 +533,8 @@ bool ReadCrashDataFromParent( int iFD, CompleteCrashData &Data ) if( !ReadFromParent(iFD, &iSize, sizeof(iSize)) ) return false; - buffer = new char[iSize]; + buffer = new char[iSize + 1]; + std::fill(buffer, buffer + iSize + 1, '\0'); wasReadSuccessful = ReadFromParent(iFD, buffer, iSize); tmp = buffer; delete[] buffer; @@ -550,7 +552,8 @@ bool ReadCrashDataFromParent( int iFD, CompleteCrashData &Data ) { if( !ReadFromParent(iFD, &iSize, sizeof(iSize)) ) return false; - buffer = new char[iSize]; + buffer = new char[iSize + 1]; + std::fill(buffer, buffer + iSize + 1, '\0'); wasReadSuccessful = ReadFromParent(iFD, buffer, iSize); tmp = buffer; delete[] buffer; @@ -565,7 +568,8 @@ bool ReadCrashDataFromParent( int iFD, CompleteCrashData &Data ) if( !ReadFromParent(iFD, &iSize, sizeof(iSize)) ) return false; - buffer = new char[iSize]; + buffer = new char[iSize + 1]; + std::fill(buffer, buffer + iSize + 1, '\0'); wasReadSuccessful = ReadFromParent(iFD, buffer, iSize); tmp = buffer; delete[] buffer; @@ -578,7 +582,8 @@ bool ReadCrashDataFromParent( int iFD, CompleteCrashData &Data ) // 6. Read the crashed thread's name. if( !ReadFromParent(iFD, &iSize, sizeof(iSize)) ) return false; - buffer = new char[iSize]; + buffer = new char[iSize + 1]; + std::fill(buffer, buffer + iSize + 1, '\0'); wasReadSuccessful = ReadFromParent(iFD, buffer, iSize); tmp = buffer; delete[] buffer; diff --git a/src/archutils/Win32/CrashHandlerNetworking.cpp b/src/archutils/Win32/CrashHandlerNetworking.cpp index b71672f2d7..8deb043638 100644 --- a/src/archutils/Win32/CrashHandlerNetworking.cpp +++ b/src/archutils/Win32/CrashHandlerNetworking.cpp @@ -651,6 +651,7 @@ void NetworkPostData::HttpThread() { sBuf.clear(); char * buffer = new char[1024]; + std::fill(buffer, buffer + 1024, '\0'); int iGot = m_pStream->Read( static_cast(buffer), 1024 ); RString tmp = buffer; delete[] buffer; diff --git a/src/archutils/Win32/ErrorStrings.cpp b/src/archutils/Win32/ErrorStrings.cpp index 0df20d62e5..5e6dccc06b 100644 --- a/src/archutils/Win32/ErrorStrings.cpp +++ b/src/archutils/Win32/ErrorStrings.cpp @@ -34,7 +34,8 @@ RString ConvertWstringToCodepage( wstring s, int iCodePage ) NULL, 0, NULL, FALSE ); ASSERT_M( iBytes > 0, werr_ssprintf( GetLastError(), "WideCharToMultiByte" ).c_str() ); - char * buf = new char[iBytes]; + char * buf = new char[iBytes + 1]; + std::fill(buf, buf + iBytes + 1, '\0'); WideCharToMultiByte( CP_ACP, 0, s.data(), s.size(), buf, iBytes, NULL, FALSE ); RString ret( buf );