summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Kanavin <alex@linutronix.de>2023-08-22 19:57:48 +0200
committerAlexander Kanavin <alex@linutronix.de>2023-08-23 14:50:41 +0200
commit285db475ecaa4d2cc39ce326b4c63aacb87ca6ad (patch)
treead8e820b84376790db3ee15a133c970f706fee10
parent8754a57d95d5140fe8a7fef74848240baa7dea54 (diff)
downloadglib-285db475ecaa4d2cc39ce326b4c63aacb87ca6ad.tar.gz
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>
-rw-r--r--glib/gfileutils.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/glib/gfileutils.c b/glib/gfileutils.c
index 9646c696e..bd3cc179a 100644
--- a/glib/gfileutils.c
+++ b/glib/gfileutils.c
@@ -1500,7 +1500,7 @@ get_tmp_file (gchar *tmpl,
static const char letters[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
static const int NLETTERS = sizeof (letters) - 1;
- glong value;
+ gint64 value;
gint64 now_us;
static int counter = 0;
@@ -1521,7 +1521,7 @@ get_tmp_file (gchar *tmpl,
for (count = 0; count < 100; value += 7777, ++count)
{
- glong v = value;
+ gint64 v = value;
/* Fill in the random bits. */
XXXXXX[0] = letters[v % NLETTERS];