GNU bug report logs - #8828
unsigned casts in PTR_BYTE_POS and BUF_PTR_BYTE_POS

Previous Next

Package: emacs;

Reported by: Paul Eggert <eggert <at> cs.ucla.edu>

Date: Thu, 9 Jun 2011 06:55:01 UTC

Severity: normal

Done: Paul Eggert <eggert <at> cs.ucla.edu>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: tracker <at> debbugs.gnu.org
Subject: bug#8828: closed (unsigned casts in PTR_BYTE_POS and
 BUF_PTR_BYTE_POS)
Date: Sat, 31 Dec 2011 08:41:01 +0000
[Message part 1 (text/plain, inline)]
Your message dated Sat, 31 Dec 2011 00:37:15 -0800
with message-id <4EFEC9BB.4040105 <at> cs.ucla.edu>
and subject line Re: unsigned casts in PTR_BYTE_POS and BUF_PTR_BYTE_POS
has caused the debbugs.gnu.org bug report #8828,
regarding unsigned casts in PTR_BYTE_POS and BUF_PTR_BYTE_POS
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)


-- 
8828: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8828
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Paul Eggert <eggert <at> cs.ucla.edu>
To: bug-gnu-emacs <at> gnu.org
Subject: unsigned casts in PTR_BYTE_POS and BUF_PTR_BYTE_POS
Date: Wed, 08 Jun 2011 23:54:36 -0700
Currently, src/buffer.h's macros PTR_BYTE_POS and BUF_PTR_BYTE_POS
both cast subexpressions to 'unsigned'.  This can't
be right on a 64-bit host, since the subexpressions might
exceed 2**32 if the buffer is large, and their values shouldn't
be truncated to 32 bits.

I can't see why the cast to 'unsigned' is there at all,
even on a 32-bit host; unless I'm missing something
the values being compared are always nonnegative.
So I'd like to install the following
patch into the trunk, after some testing.

=== modified file 'src/buffer.h'
--- src/buffer.h	2011-06-06 19:43:39 +0000
+++ src/buffer.h	2011-06-09 04:04:41 +0000
@@ -337,7 +337,7 @@
 
 #define PTR_BYTE_POS(ptr) \
 ((ptr) - (current_buffer)->text->beg					    \
- - (ptr - (current_buffer)->text->beg <= (unsigned) (GPT_BYTE - BEG_BYTE) ? 0 : GAP_SIZE) \
+ - (ptr - (current_buffer)->text->beg <= GPT_BYTE - BEG_BYTE ? 0 : GAP_SIZE) \
  + BEG_BYTE)
 
 /* Return character at byte position POS.  */
@@ -396,7 +396,7 @@
 
 #define BUF_PTR_BYTE_POS(buf, ptr)				\
 ((ptr) - (buf)->text->beg					\
- - (ptr - (buf)->text->beg <= (unsigned) (BUF_GPT_BYTE ((buf)) - BEG_BYTE)\
+ - (ptr - (buf)->text->beg <= BUF_GPT_BYTE ((buf)) - BEG_BYTE	\
     ? 0 : BUF_GAP_SIZE ((buf)))					\
  + BEG_BYTE)
 


[Message part 3 (message/rfc822, inline)]
From: Paul Eggert <eggert <at> cs.ucla.edu>
To: 8828-done <at> debbugs.gnu.org
Subject: Re: unsigned casts in PTR_BYTE_POS and BUF_PTR_BYTE_POS
Date: Sat, 31 Dec 2011 00:37:15 -0800
This bug was fixed in bzr 104599 in the trunk, dated 2011-06-15.
I forgot to close it then but am closing it now.


This bug report was last modified 13 years and 150 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.