From 047d4a8e14cdbb50258bf8c5634db24a88767f24 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sat, 23 Sep 2017 19:44:48 -0700 Subject: [PATCH] Avoid unfounded warnings from GCC 7.2. GCC thinks that these printf formats can produce output longer than the buffer that is available for them. I think that it is wrong, but it is easy enough to use larger (or variable-length) buffers, so this commit does that. --- src/data/sys-file-writer.c | 16 ++++++++-------- src/language/stats/descriptives.c | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/data/sys-file-writer.c b/src/data/sys-file-writer.c index 7f0c8c056a..df5108e2a0 100644 --- a/src/data/sys-file-writer.c +++ b/src/data/sys-file-writer.c @@ -365,8 +365,6 @@ write_header (struct sfm_writer *w, const struct dictionary *d) { const char *dict_encoding = dict_get_encoding (d); char prod_name[61]; - char creation_date[10]; - char creation_time[9]; const char *file_label; struct variable *weight; @@ -409,10 +407,11 @@ write_header (struct sfm_writer *w, const struct dictionary *d) write_float (w, COMPRESSION_BIAS); /* Creation date and time. */ + char *creation_date, *creation_time; if (time (&t) == (time_t) -1) { - strcpy (creation_date, "01 Jan 70"); - strcpy (creation_time, "00:00:00"); + creation_date = xstrdup ("01 Jan 70"); + creation_time = xstrdup ( "00:00:00"); } else { @@ -429,13 +428,14 @@ write_header (struct sfm_writer *w, const struct dictionary *d) int min = rerange (tmp->tm_min + 1); int sec = rerange (tmp->tm_sec + 1); - snprintf (creation_date, sizeof creation_date, - "%02d %s %02d", day, month_name[mon - 1], year); - snprintf (creation_time, sizeof creation_time, - "%02d:%02d:%02d", hour - 1, min - 1, sec - 1); + creation_date = xasprintf ("%02d %s %02d", + day, month_name[mon - 1], year); + creation_time = xasprintf ("%02d:%02d:%02d", hour - 1, min - 1, sec - 1); } write_utf8_string (w, dict_encoding, creation_date, 9); write_utf8_string (w, dict_encoding, creation_time, 8); + free (creation_time); + free (creation_date); /* File label. */ file_label = dict_get_label (d); diff --git a/src/language/stats/descriptives.c b/src/language/stats/descriptives.c index 7182049a66..11a9f7f31e 100644 --- a/src/language/stats/descriptives.c +++ b/src/language/stats/descriptives.c @@ -558,7 +558,7 @@ generate_z_varname (const struct dictionary *dict, struct dsc_proc *dsc, /* Generate a synthetic name. */ for (;;) { - char name[8]; + char name[16]; (*z_cnt)++; -- 2.30.2