make query formatting mistakes less likely

This commit is contained in:
Eric House 2020-01-31 16:54:35 -08:00
parent dc1eeeaead
commit d891d59fc9

View file

@ -287,19 +287,37 @@ summarize( CommonGlobals* cGlobals )
strcat( connvia, "local" ); strcat( connvia, "local" );
} }
const char* fmt = "UPDATE games " gchar* pairs[40];
" SET room='%s', ended=%d, turn=%d, local=%d, ntotal=%d, " int indx = 0;
" nmissing=%d, nmoves=%d, seed=%d, dictlang=%d, gameid=%d, connvia='%s', " pairs[indx++] = g_strdup_printf( "room='%s'", room );
" relayid='%s', lastMoveTime=%d, dupTimerExpires=%d, scores='%s', " pairs[indx++] = g_strdup_printf( "ended=%d", gameOver?1:0 );
" nPending=%d, role=%d" pairs[indx++] = g_strdup_printf( "turn=%d", turn);
" WHERE rowid=%lld"; pairs[indx++] = g_strdup_printf( "local=%d", isLocal?1:0);
XP_UCHAR buf[2*256]; pairs[indx++] = g_strdup_printf( "ntotal=%d", nTotal );
snprintf( buf, sizeof(buf), fmt, room, gameOver?1:0, turn, isLocal?1:0, pairs[indx++] = g_strdup_printf( "nmissing=%d", nMissing);
nTotal, nMissing, nMoves, seed, dictLang, gameID, connvia, relayID, lastMoveTime, pairs[indx++] = g_strdup_printf( "nmoves=%d", nMoves);
dupTimerExpires, scoresStr, nPending, gi->serverRole, cGlobals->rowid ); pairs[indx++] = g_strdup_printf( "seed=%d", seed);
XP_LOGF( "query: %s", buf ); pairs[indx++] = g_strdup_printf( "dictlang=%d", dictLang);
pairs[indx++] = g_strdup_printf( "gameid=%d", gameID);
pairs[indx++] = g_strdup_printf( "connvia='%s'", connvia);
pairs[indx++] = g_strdup_printf( "relayid='%s'", relayID);
pairs[indx++] = g_strdup_printf( "lastMoveTime=%d", lastMoveTime );
pairs[indx++] = g_strdup_printf( "dupTimerExpires=%d", dupTimerExpires);
pairs[indx++] = g_strdup_printf( "scores='%s'", scoresStr);
pairs[indx++] = g_strdup_printf( "nPending=%d", nPending );
pairs[indx++] = g_strdup_printf( "role=%d", gi->serverRole);
pairs[indx++] = NULL;
gchar* vals = g_strjoinv( ",", pairs );
for ( int ii = 0; !!pairs[ii]; ++ii ) {
g_free( pairs[ii] );
}
gchar* query = g_strdup_printf( "UPDATE games SET %s WHERE rowid=%lld",
vals, cGlobals->rowid );
g_free( vals );
XP_LOGF( "query: %s", query );
sqlite3_stmt* stmt = NULL; sqlite3_stmt* stmt = NULL;
int result = sqlite3_prepare_v2( cGlobals->params->pDb, buf, -1, &stmt, NULL ); int result = sqlite3_prepare_v2( cGlobals->params->pDb, query, -1, &stmt, NULL );
assertPrintResult( cGlobals->params->pDb, result, SQLITE_OK ); assertPrintResult( cGlobals->params->pDb, result, SQLITE_OK );
result = sqlite3_step( stmt ); result = sqlite3_step( stmt );
if ( SQLITE_DONE != result ) { if ( SQLITE_DONE != result ) {
@ -313,6 +331,7 @@ summarize( CommonGlobals* cGlobals )
addSnapshot( cGlobals ); addSnapshot( cGlobals );
} }
g_free( scoresStr ); g_free( scoresStr );
g_free( query );
} }
GSList* GSList*