aboutsummaryrefslogtreecommitdiffstats
path: root/FICS/gamedb.c
diff options
context:
space:
mode:
Diffstat (limited to 'FICS/gamedb.c')
-rw-r--r--FICS/gamedb.c37
1 files changed, 24 insertions, 13 deletions
diff --git a/FICS/gamedb.c b/FICS/gamedb.c
index 2656447..19f0dc7 100644
--- a/FICS/gamedb.c
+++ b/FICS/gamedb.c
@@ -43,6 +43,9 @@
Markus Uhlin 25/04/01 ReadV1GameFmt: guard num half
moves.
Markus Uhlin 25/04/06 Fixed Clang Tidy warnings.
+ Markus Uhlin 25/07/28 Fixed use of potentially
+ dangerous functions.
+ Markus Uhlin 25/07/29 Usage of 'int64_t'.
*/
#include "stdinclude.h"
@@ -50,7 +53,9 @@
#include <err.h>
#include <errno.h>
+#include <inttypes.h>
#include <limits.h>
+#include <stdint.h>
#include "command.h"
#include "config.h"
@@ -563,12 +568,12 @@ EndSym(int g)
PUBLIC char *
movesToString(int g, int pgn)
{
+ char tmp[160] = { '\0' };
char *serv_loc = SERVER_LOCATION;
char *serv_name = SERVER_NAME;
- char tmp[160] = { '\0' };
int i, col;
int wr, br;
- struct tm *tm_ptr = NULL;
+ struct tm v_tm = {0};
time_t curTime;
wr = garray[g].white_rating;
@@ -586,14 +591,16 @@ movesToString(int g, int pgn)
serv_name,
serv_loc);
- if ((tm_ptr = localtime(&curTime)) != NULL) {
+ errno = 0;
+
+ if (localtime_r(&curTime, &v_tm) != NULL) {
strftime(tmp, sizeof(tmp),
"[Date \"%Y.%m.%d\"]\n"
"[Time \"%H:%M:%S\"]\n",
- tm_ptr);
+ &v_tm);
mstrlcat(gameString, tmp, sizeof gameString);
} else
- warn("%s: localtime", __func__);
+ warn("%s: localtime_r()", __func__);
msnprintf(tmp, sizeof tmp,
"[Round \"-\"]\n"
@@ -668,11 +675,13 @@ movesToString(int g, int pgn)
mstrlcat(gameString, tmp, sizeof gameString);
mstrlcat(gameString, "--- ", sizeof gameString);
- if ((tm_ptr = localtime(&curTime)) != NULL) {
- strftime(tmp, sizeof tmp, "%Y.%m.%d %H:%M:%S", tm_ptr);
+ errno = 0;
+
+ if (localtime_r(&curTime, &v_tm) != NULL) {
+ strftime(tmp, sizeof tmp, "%Y.%m.%d %H:%M:%S", &v_tm);
mstrlcat(gameString, tmp, sizeof gameString);
} else
- warn("%s: localtime", __func__);
+ warn("%s: localtime_r()", __func__);
if (garray[g].rated) {
mstrlcat(gameString, "\nRated ", sizeof gameString);
@@ -1276,7 +1285,7 @@ PRIVATE int
ReadV1GameFmt(game *g, FILE *fp, const char *file, int version)
{
int ret[3];
- long int lval;
+ int64_t lval;
_Static_assert(17 < ARRAY_SIZE(g->white_name), "Unexpected array size");
_Static_assert(17 < ARRAY_SIZE(g->black_name), "Unexpected array size");
@@ -1300,7 +1309,7 @@ ReadV1GameFmt(game *g, FILE *fp, const char *file, int version)
if (version < 3 && !g->bInitTime)
g->bInitTime = g->wInitTime;
- if (fscanf(fp, "%ld", &lval) != 1) {
+ if (fscanf(fp, "%" SCNd64, &lval) != 1) {
warnx("%s: %s: failed to get time of start", __func__, file);
return -1;
} else
@@ -1514,7 +1523,7 @@ PRIVATE void
WriteGameFile(FILE *fp, int g)
{
game *gg = &garray[g];
- long int lval;
+ int64_t lval;
player *bp = &parray[gg->black];
player *wp = &parray[gg->white];
@@ -1525,7 +1534,7 @@ WriteGameFile(FILE *fp, int g)
gg->bInitTime, gg->bIncrement);
lval = gg->timeOfStart;
- fprintf(fp, "%ld\n", lval);
+ fprintf(fp, "%" PRId64 "\n", lval);
#ifdef TIMESEAL
fprintf(fp, "%d %d\n",
@@ -2123,6 +2132,8 @@ pgames(int p, int p1, char *fname)
_Static_assert(ARRAY_SIZE(ending) > 99, "'ending' too small");
while (!feof(fp)) {
+ char tbuf[30] = { '\0' };
+
if (fscanf(fp, "%d %1s %d %1s %d %19s %99s %d %d %d %d %99s "
"%99s %ld\n",
&count, result, &MyRating, MyColor,
@@ -2145,7 +2156,7 @@ pgames(int p, int p1, char *fname)
count, result, MyRating, MyColor,
OppRating, OppName,
type, (wt / 600), (wi / 10), eco, ending,
- ctime(&t));
+ ctime_r(&t, tbuf) != NULL ? &tbuf[0] : "");
}
fclose(fp);