glib/gfileutils.c: use 64 bits for value in get_tmp_file()

On 32 bit systems 'long' value will overflow in 2038 and become negative.
As it is used to index into letters array, and % operation preserves signs,
data corruption will then occur.

Signed-off-by: Alexander Kanavin <alex@linutronix.de>
This commit is contained in:
Alexander Kanavin 2023-08-22 19:57:48 +02:00 committed by Philip Withnall
parent 40fb81f0ea
commit b4d60ba136

View File

@ -1500,7 +1500,7 @@ get_tmp_file (gchar *tmpl,
static const char letters[] = static const char letters[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
static const int NLETTERS = sizeof (letters) - 1; static const int NLETTERS = sizeof (letters) - 1;
glong value; gint64 value;
gint64 now_us; gint64 now_us;
static int counter = 0; static int counter = 0;
@ -1521,7 +1521,7 @@ get_tmp_file (gchar *tmpl,
for (count = 0; count < 100; value += 7777, ++count) for (count = 0; count < 100; value += 7777, ++count)
{ {
glong v = value; gint64 v = value;
/* Fill in the random bits. */ /* Fill in the random bits. */
XXXXXX[0] = letters[v % NLETTERS]; XXXXXX[0] = letters[v % NLETTERS];