summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-05-25 22:00:11 +0200
committerBram Moolenaar <Bram@vim.org>2016-05-25 22:00:11 +0200
commit54c10ccf9274880e83093a99690e7bfa9a2d2fa8 (patch)
tree94a7aacea4e6430c1ccb441fa830385be10d6ce2
parentf8df45d84f1d17dced23e185d4835fc23406d73d (diff)
patch 7.4.1846v7.4.1846
Problem: Ubsan detects a multiplication overflow. Solution: Don't use orig_mouse_time when it's zero. (Dominique Pelle)
-rw-r--r--src/term.c25
-rw-r--r--src/version.c2
2 files changed, 21 insertions, 6 deletions
diff --git a/src/term.c b/src/term.c
index b9af731010..7ff5af6dc3 100644
--- a/src/term.c
+++ b/src/term.c
@@ -5031,12 +5031,25 @@ check_termcode(
* Compute the time elapsed since the previous mouse click.
*/
gettimeofday(&mouse_time, NULL);
- timediff = (mouse_time.tv_usec
- - orig_mouse_time.tv_usec) / 1000;
- if (timediff < 0)
- --orig_mouse_time.tv_sec;
- timediff += (mouse_time.tv_sec
- - orig_mouse_time.tv_sec) * 1000;
+ if (orig_mouse_time.tv_sec == 0)
+ {
+ /*
+ * Avoid computing the difference between mouse_time
+ * and orig_mouse_time for the first click, as the
+ * difference would be huge and would cause multiplication
+ * overflow.
+ */
+ timediff = p_mouset;
+ }
+ else
+ {
+ timediff = (mouse_time.tv_usec
+ - orig_mouse_time.tv_usec) / 1000;
+ if (timediff < 0)
+ --orig_mouse_time.tv_sec;
+ timediff += (mouse_time.tv_sec
+ - orig_mouse_time.tv_sec) * 1000;
+ }
orig_mouse_time = mouse_time;
if (mouse_code == orig_mouse_code
&& timediff < p_mouset
diff --git a/src/version.c b/src/version.c
index 898ad79ad9..20267a7f1b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1846,
+/**/
1845,
/**/
1844,