From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#8664: * keyboard.c (make_lispy_event): Fix problem in integer overflow. Date: Thu, 12 May 2011 12:58:14 -0700 Organization: UCLA Computer Science Department Message-ID: <4DCC3BD6.3000200@cs.ucla.edu> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Trace: dough.gmane.org 1305230352 14308 80.91.229.12 (12 May 2011 19:59:12 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Thu, 12 May 2011 19:59:12 +0000 (UTC) To: 8664@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu May 12 21:59:08 2011 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1QKc2N-000111-0d for geb-bug-gnu-emacs@m.gmane.org; Thu, 12 May 2011 21:59:07 +0200 Original-Received: from localhost ([::1]:43717 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QKc2M-0002n5-L6 for geb-bug-gnu-emacs@m.gmane.org; Thu, 12 May 2011 15:59:06 -0400 Original-Received: from eggs.gnu.org ([140.186.70.92]:40141) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QKc2K-0002mq-6s for bug-gnu-emacs@gnu.org; Thu, 12 May 2011 15:59:05 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QKc2J-0000IP-Bv for bug-gnu-emacs@gnu.org; Thu, 12 May 2011 15:59:04 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:41947) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QKc2J-0000IL-AI for bug-gnu-emacs@gnu.org; Thu, 12 May 2011 15:59:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.69) (envelope-from ) id 1QKc2I-0003r2-Q7; Thu, 12 May 2011 15:59:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-To: owner@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 12 May 2011 19:59:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 8664 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.130523031614776 (code B ref -1); Thu, 12 May 2011 19:59:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 12 May 2011 19:58:36 +0000 Original-Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1QKc1q-0003qG-Ep for submit@debbugs.gnu.org; Thu, 12 May 2011 15:58:35 -0400 Original-Received: from eggs.gnu.org ([140.186.70.92]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1QKc1h-0003pv-AR for submit@debbugs.gnu.org; Thu, 12 May 2011 15:58:29 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QKc1b-00007R-3Y for submit@debbugs.gnu.org; Thu, 12 May 2011 15:58:20 -0400 Original-Received: from lists.gnu.org ([140.186.70.17]:46442) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QKc1b-00007J-1v for submit@debbugs.gnu.org; Thu, 12 May 2011 15:58:19 -0400 Original-Received: from eggs.gnu.org ([140.186.70.92]:39795) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QKc1a-0002S8-5p for bug-gnu-emacs@gnu.org; Thu, 12 May 2011 15:58:19 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QKc1Y-000072-Oq for bug-gnu-emacs@gnu.org; Thu, 12 May 2011 15:58:18 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:38608) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QKc1Y-00006w-EM for bug-gnu-emacs@gnu.org; Thu, 12 May 2011 15:58:16 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 2BA6E39E80F9 for ; Thu, 12 May 2011 12:58:15 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qP4zZffe7YQ4 for ; Thu, 12 May 2011 12:58:14 -0700 (PDT) Original-Received: from [131.179.64.200] (Penguin.CS.UCLA.EDU [131.179.64.200]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id C6E6839E80F8 for ; Thu, 12 May 2011 12:58:14 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110428 Fedora/3.1.10-1.fc14 Thunderbird/3.1.10 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list Resent-Date: Thu, 12 May 2011 15:59:02 -0400 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:46430 Archived-At: Here's a patch for a potential problem with integer overflow on 64-bit hosts that I plan to install after some more testing. The problem is a bit more severe if EMACS_INT is 64-bit on a 32-bit host, and I found it by inspection. * keyboard.c (make_lispy_event): Fix problem in integer overflow. Don't assume that the difference between two unsigned long values can fit into an integer. At this point, we know button_down_time <= event->timestamp, so the difference must be nonnegative, so there's no need to cast the result if double-click-time is nonnegative, as it should be; check that it's nonnegative, just in case. This bug is triggered when events are more than 2**31 ms apart (about 25 days). === modified file 'src/keyboard.c' --- src/keyboard.c 2011-04-28 19:35:20 +0000 +++ src/keyboard.c 2011-05-12 19:33:15 +0000 @@ -5556,9 +5556,9 @@ && (eabs (XINT (event->y) - last_mouse_y) <= fuzz) && button_down_time != 0 && (EQ (Vdouble_click_time, Qt) - || (INTEGERP (Vdouble_click_time) - && ((int)(event->timestamp - button_down_time) - < XINT (Vdouble_click_time))))); + || (NATNUMP (Vdouble_click_time) + && (event->timestamp - button_down_time + < XFASTINT (Vdouble_click_time))))); } last_mouse_button = button; @@ -5742,9 +5742,9 @@ && (eabs (XINT (event->y) - last_mouse_y) <= fuzz) && button_down_time != 0 && (EQ (Vdouble_click_time, Qt) - || (INTEGERP (Vdouble_click_time) - && ((int)(event->timestamp - button_down_time) - < XINT (Vdouble_click_time))))); + || (NATNUMP (Vdouble_click_time) + && (event->timestamp - button_down_time + < XFASTINT (Vdouble_click_time))))); if (is_double) { double_click_count++;