diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2020-03-25 18:20:31 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2020-03-25 18:38:07 -0700 |
commit | 98546d9c823db544b62bdba0bb388816ea6dd342 (patch) | |
tree | fe46e55c6146b8211ae08a2894bdde892691527a /src/cmds.c | |
parent | e4b6151ff119f36c64d3653b56f761fcdfe47fd3 (diff) | |
download | emacs-98546d9c823db544b62bdba0bb388816ea6dd342.tar.gz |
Fix integer overflow in internal_self_insert
* src/cmds.c (internal_self_insert): Avoid undefined behavior
on integer overflow by using saturated add.
Diffstat (limited to 'src/cmds.c')
-rw-r--r-- | src/cmds.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/cmds.c b/src/cmds.c index 5b98a09fda9..c342cd88bd8 100644 --- a/src/cmds.c +++ b/src/cmds.c @@ -451,7 +451,10 @@ internal_self_insert (int c, EMACS_INT n) string = concat2 (string, tem); } - replace_range (PT, PT + chars_to_delete, string, 1, 1, 1, 0); + ptrdiff_t to; + if (INT_ADD_WRAPV (PT, chars_to_delete, &to)) + to = PTRDIFF_MAX; + replace_range (PT, to, string, 1, 1, 1, 0); Fforward_char (make_fixnum (n)); } else if (n > 1) |