]> git.eshelyaron.com Git - emacs.git/commitdiff
Adjust x_display_set_last_user_time for Xlib sign-extension
authorPo Lu <luangruo@yahoo.com>
Tue, 22 Nov 2022 12:57:47 +0000 (20:57 +0800)
committerPo Lu <luangruo@yahoo.com>
Tue, 22 Nov 2022 12:58:07 +0000 (20:58 +0800)
* src/xterm.c (x_display_set_last_user_time): Adjust for Xlib
sign extending fields in client messages to 64 bit long, which
then break x_display_set_last_user_time after 24 days, as Time
is unsigned long for historical reasons.  (bug#59480)

src/xterm.c

index 154f404e6b4e68ed648ad008c766350950c2c63c..732fbf462c9c37b3f8c88683579bc576cf5e9e06 100644 (file)
@@ -7749,6 +7749,11 @@ x_display_set_last_user_time (struct x_display_info *dpyinfo, Time time,
   old_time = dpyinfo->last_user_time;
 #endif
 
+  /* Time can be sign extended if retrieved from a client message.
+     Make sure it is always 32 bits, or systems with 64-bit longs
+     will crash after 24 days of X server uptime.  (bug#59480) */
+  time &= X_ULONG_MAX;
+
 #ifdef ENABLE_CHECKING
   eassert (time <= X_ULONG_MAX);
 #endif