diff options
| author | Paul Eggert | 2011-07-18 14:08:22 -0700 |
|---|---|---|
| committer | Paul Eggert | 2011-07-18 14:08:22 -0700 |
| commit | 18c525570121d8d3df377f85ec5b6f44fe39524a (patch) | |
| tree | d8dccb95056d3de5087a8e10fba49cc3ae572d20 /src | |
| parent | caeeedc1afd7205303a99ef8ce7e4ce7d2055042 (diff) | |
| download | emacs-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/ChangeLog | 3 | ||||
| -rw-r--r-- | src/fileio.c | 6 |
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 @@ | |||
| 1 | 2011-07-18 Paul Eggert <eggert@cs.ucla.edu> | 1 | 2011-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 |