aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2011-07-18 14:08:22 -0700
committerPaul Eggert2011-07-18 14:08:22 -0700
commit18c525570121d8d3df377f85ec5b6f44fe39524a (patch)
treed8dccb95056d3de5087a8e10fba49cc3ae572d20 /src
parentcaeeedc1afd7205303a99ef8ce7e4ce7d2055042 (diff)
downloademacs-18c525570121d8d3df377f85ec5b6f44fe39524a.tar.gz
emacs-18c525570121d8d3df377f85ec5b6f44fe39524a.zip
* fileio.c: Integer overflow issues with file modes.
(Fset_file_modes, auto_save_1): Don't assume EMACS_INT fits in int.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog3
-rw-r--r--src/fileio.c6
2 files changed, 6 insertions, 3 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 869e2637cf4..c516a346a89 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,8 @@
12011-07-18 Paul Eggert <eggert@cs.ucla.edu> 12011-07-18 Paul Eggert <eggert@cs.ucla.edu>
2 2
3 * fileio.c: Integer overflow issues with file modes.
4 (Fset_file_modes, auto_save_1): Don't assume EMACS_INT fits in int.
5
3 * charset.c (read_hex): New arg OVERFLOW. All uses changed. 6 * charset.c (read_hex): New arg OVERFLOW. All uses changed.
4 Remove unreachable code. 7 Remove unreachable code.
5 (read_hex, load_charset_map_from_file): Check for integer overflow. 8 (read_hex, load_charset_map_from_file): Check for integer overflow.
diff --git a/src/fileio.c b/src/fileio.c
index bdea302a0d6..af11e927059 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -2893,7 +2893,7 @@ symbolic notation, like the `chmod' command from GNU Coreutils. */)
2893 2893
2894 encoded_absname = ENCODE_FILE (absname); 2894 encoded_absname = ENCODE_FILE (absname);
2895 2895
2896 if (chmod (SSDATA (encoded_absname), XINT (mode)) < 0) 2896 if (chmod (SSDATA (encoded_absname), XINT (mode) & 07777) < 0)
2897 report_file_error ("Doing chmod", Fcons (absname, Qnil)); 2897 report_file_error ("Doing chmod", Fcons (absname, Qnil));
2898 2898
2899 return Qnil; 2899 return Qnil;
@@ -5095,11 +5095,11 @@ auto_save_1 (void)
5095 { 5095 {
5096 if (stat (SSDATA (BVAR (current_buffer, filename)), &st) >= 0) 5096 if (stat (SSDATA (BVAR (current_buffer, filename)), &st) >= 0)
5097 /* But make sure we can overwrite it later! */ 5097 /* But make sure we can overwrite it later! */
5098 auto_save_mode_bits = st.st_mode | 0600; 5098 auto_save_mode_bits = (st.st_mode | 0600) & 0777;
5099 else if ((modes = Ffile_modes (BVAR (current_buffer, filename)), 5099 else if ((modes = Ffile_modes (BVAR (current_buffer, filename)),
5100 INTEGERP (modes))) 5100 INTEGERP (modes)))
5101 /* Remote files don't cooperate with stat. */ 5101 /* Remote files don't cooperate with stat. */
5102 auto_save_mode_bits = XINT (modes) | 0600; 5102 auto_save_mode_bits = (XINT (modes) | 0600) & 0777;
5103 } 5103 }
5104 5104
5105 return 5105 return