From 6aa8e432f735a829e2366c579c0dd637d3567d11 Mon Sep 17 00:00:00 2001 From: Garux Date: Wed, 24 Mar 2021 04:26:54 +0300 Subject: [PATCH] change Preferences_Save_Safe code to not have small oob read --- radiant/preferences.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/radiant/preferences.cpp b/radiant/preferences.cpp index 31bef256..8ec4126f 100644 --- a/radiant/preferences.cpp +++ b/radiant/preferences.cpp @@ -176,15 +176,10 @@ bool Preferences_Save( PreferenceDictionary& preferences, const char* filename ) } bool Preferences_Save_Safe( PreferenceDictionary& preferences, const char* filename ){ - Array tmpName( filename, filename + strlen( filename ) + 1 + 3 ); - *( tmpName.end() - 4 ) = 'T'; - *( tmpName.end() - 3 ) = 'M'; - *( tmpName.end() - 2 ) = 'P'; - *( tmpName.end() - 1 ) = '\0'; - - return Preferences_Save( preferences, tmpName.data() ) + const auto tmpName = StringOutputStream()( filename, "TMP" ); + return Preferences_Save( preferences, tmpName ) && ( !file_exists( filename ) || file_remove( filename ) ) - && file_move( tmpName.data(), filename ); + && file_move( tmpName, filename ); }