* Move storage of console history from a cvar to a file in order to alleviate

security concerns
This commit is contained in:
Tim Angus 2007-04-01 13:38:17 +00:00
parent f9bb47d9af
commit fb58d8f123
1 changed files with 74 additions and 47 deletions

View File

@ -1373,7 +1373,9 @@ void Key_ClearStates (void)
// This must not exceed MAX_CMD_LINE
#define MAX_CONSOLE_SAVE_BUFFER 1024
#define CONSOLE_HISTORY_FILE "q3history"
static char consoleSaveBuffer[ MAX_CONSOLE_SAVE_BUFFER ];
static int consoleSaveBufferSize = 0;
/*
================
@ -1386,11 +1388,18 @@ void CL_LoadConsoleHistory( void )
{
char *token, *text_p;
int i, numChars, numLines = 0;
cvar_t *cv;
fileHandle_t f;
cv = Cvar_Get( "cl_consoleHistory", "", CVAR_ARCHIVE|CVAR_ROM );
Q_strncpyz( consoleSaveBuffer, cv->string, MAX_CONSOLE_SAVE_BUFFER );
consoleSaveBufferSize = FS_FOpenFileRead( CONSOLE_HISTORY_FILE, &f, qfalse );
if( !f )
{
Com_Printf( "Couldn't read %s.\n", CONSOLE_HISTORY_FILE );
return;
}
if( consoleSaveBufferSize <= MAX_CONSOLE_SAVE_BUFFER &&
FS_Read( consoleSaveBuffer, consoleSaveBufferSize, f ) == consoleSaveBufferSize )
{
text_p = consoleSaveBuffer;
for( i = COMMAND_HISTORY - 1; i >= 0; i-- )
@ -1429,6 +1438,11 @@ void CL_LoadConsoleHistory( void )
Field_Clear( &historyEditLines[ i ] );
historyLine = nextHistoryLine = numLines;
}
else
Com_Printf( "Couldn't read %s.\n", CONSOLE_HISTORY_FILE );
FS_FCloseFile( f );
}
/*
@ -1443,6 +1457,7 @@ void CL_SaveConsoleHistory( void )
{
int i;
int lineLength, saveBufferLength, additionalLength;
fileHandle_t f;
consoleSaveBuffer[ 0 ] = '\0';
@ -1454,8 +1469,8 @@ void CL_SaveConsoleHistory( void )
lineLength = strlen( historyEditLines[ i ].buffer );
saveBufferLength = strlen( consoleSaveBuffer );
//ICK "seta cl_consoleHistory " + "%d %d %d " = 23 + 13 = 36
additionalLength = lineLength + 36;
//ICK
additionalLength = lineLength + strlen( "999 999 999 " );
if( saveBufferLength + additionalLength < MAX_CONSOLE_SAVE_BUFFER )
{
@ -1473,5 +1488,17 @@ void CL_SaveConsoleHistory( void )
}
while( i != ( nextHistoryLine - 1 ) % COMMAND_HISTORY );
Cvar_Set( "cl_consoleHistory", consoleSaveBuffer );
consoleSaveBufferSize = strlen( consoleSaveBuffer );
f = FS_FOpenFileWrite( CONSOLE_HISTORY_FILE );
if( !f )
{
Com_Printf( "Couldn't write %s.\n", CONSOLE_HISTORY_FILE );
return;
}
if( FS_Write( consoleSaveBuffer, consoleSaveBufferSize, f ) < consoleSaveBufferSize )
Com_Printf( "Couldn't write %s.\n", CONSOLE_HISTORY_FILE );
FS_FCloseFile( f );
}