From e00553bf16bacd9ab51ea81f14ded352aad616bd Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 20 Mar 2009 17:59:38 +0000 Subject: [PATCH] (Fuser_uid, Fuser_real_uid): If UID as EMACS_INT is negative, produce a float value. --- src/ChangeLog | 8 ++++++++ src/editfns.c | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 8812516e41c..1f95b2846d5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2009-03-20 Eli Zaretskii + + * editfns.c (Fuser_uid, Fuser_real_uid): If UID as EMACS_INT is + negative, produce a float value. + + * dired.c (make_uid, make_gid): New functions. + (Ffile_attributes): Use them to avoid negative UID and GID. + 2009-03-20 Juanma Barranquero * keyboard.c (Fcurrent_idle_time): Reflow docstring. diff --git a/src/editfns.c b/src/editfns.c index cfce1f2add6..aac670bb35b 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -1319,23 +1319,33 @@ This ignores the environment variables LOGNAME and USER, so it differs from DEFUN ("user-uid", Fuser_uid, Suser_uid, 0, 0, 0, doc: /* Return the effective uid of Emacs. -Value is an integer or float, depending on the value. */) +Value is an integer or a float, depending on the value. */) () { /* Assignment to EMACS_INT stops GCC whining about limited range of data type. */ EMACS_INT euid = geteuid (); + + /* Make sure we don't produce a negative UID due to signed integer + overflow. */ + if (euid < 0) + return make_float ((double)geteuid ()); return make_fixnum_or_float (euid); } DEFUN ("user-real-uid", Fuser_real_uid, Suser_real_uid, 0, 0, 0, doc: /* Return the real uid of Emacs. -Value is an integer or float, depending on the value. */) +Value is an integer or a float, depending on the value. */) () { /* Assignment to EMACS_INT stops GCC whining about limited range of data type. */ EMACS_INT uid = getuid (); + + /* Make sure we don't produce a negative UID due to signed integer + overflow. */ + if (uid < 0) + return make_float ((double)getuid ()); return make_fixnum_or_float (uid); } -- 2.39.5