2016-05-24 22:24 GMT+03:00 Dominique Pellé <dominique.pe...@gmail.com>:
> Hi
>
> Vim-7.4.1841 (and older) built with ubsan (undefined
> sanitizer) on x86 shows a multiplication overflow when
> clicking in the vim terminal for the first time:
>
> term.c:5039:37: runtime error: signed integer overflow: 1464114431 *
> 1000 cannot be represented in type 'long int'
>
> Steps to reproduce:
>
> 1) build vim with ubsan. It can be done by
>    uncommenting this line in vim/src/Makefile
>
> SANITIZER_CFLAGS = -g -O0 -fsanitize=undefined -fno-omit-frame-pointer
>
> 2) start vim with:
>   $ vim -u NONE --noplugin -c 'set mouse=a' 2> log
>
> 3) left-click in the terminal with the mouse
>
> 4) observe the error in 'log' file.
>
> It happens only on the first click.
> It also only happens on 32-bits Linux x86 and not on x86_64.
>
> Code at term.c:5039:
>
>   5030           /*
>   5031            * Compute the time elapsed since the previous mouse click.
>   5032            */
>   5033           gettimeofday(&mouse_time, NULL);
>   5034           timediff = (mouse_time.tv_usec
>   5035                                   - orig_mouse_time.tv_usec) / 1000;
>   5036           if (timediff < 0)
>   5037               --orig_mouse_time.tv_sec;
>   5038           timediff += (mouse_time.tv_sec
> !!5039                                    - orig_mouse_time.tv_sec) * 1000;
>
> Adding printf, I can see that:
>
> * mouse_time.tv_sec is 1464115088 (this value changes slightly
>   every time I reproduce the bug, as it depends on time)
> * orig_mouse_time.tv_sec is 0
>
> So the multiplication by 1000 at line 5039 overflows in 32-bits
> on x86. Overflow does not happen on x86_64 as tv_sec is then
> a 64-bits number.
>
> Attached patch fixes it.

I do not see any attachements.

>
> Regards
> Dominique
>
> --
> --
> You received this message from the "vim_dev" maillist.
> Do not top-post! Type your reply below the text you are replying to.
> For more information, visit http://www.vim.org/maillist.php
>
> ---
> You received this message because you are subscribed to the Google Groups 
> "vim_dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to vim_dev+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui