GNU bug report logs - #7201
unportable integer expression in src/install.c

Previous Next

Package: coreutils;

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

Date: Tue, 12 Oct 2010 19:37:02 UTC

Severity: normal

Done: Jim Meyering <jim <at> meyering.net>

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>
Subject: bug#7201: closed (Re: bug#7201: unportable integer expression in
 src/install.c)
Date: Sun, 17 Apr 2011 08:59:02 +0000
[Message part 1 (text/plain, inline)]
Your bug report

#7201: unportable integer expression in src/install.c

which was filed against the coreutils package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to 7201 <at> debbugs.gnu.org.

-- 
7201: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7201
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Jim Meyering <jim <at> meyering.net>
To: 7201-done <at> debbugs.gnu.org
Subject: Re: bug#7201: unportable integer expression in src/install.c
Date: Sun, 17 Apr 2011 10:58:14 +0200
Jim Meyering wrote:

> Paul Eggert wrote:
>> Solaris 10 cc issues this warning:
>>
>> "install.c", line 189: warning: initializer does not fit or is out
>> of range: -61952
>>
>> and indeed the code in question relies on undefined
>> behavior, as it shoehorns what may be a large negative
>> number into a small int variable.  Here's a patch
>> to src/install.c.  Maybe you should remove the "const"
>> while you're at it, as it's not that helpful here?
>>
>> --- src/install.c~  2010-09-27 23:00:50.000000000 -0700
>> +++ src/install.c   2010-10-12 12:35:30.277787068 -0700
>> @@ -186,8 +186,8 @@ have_same_content (int a_fd, int b_fd)
>>  static bool
>>  extra_mode (mode_t input)
>>  {
>> -  const mode_t mask = ~S_IRWXUGO & ~S_IFMT;
>> -  return !! (input & mask);
>> +  const mode_t mask = S_IRWXUGO | S_IFMT;
>> +  return !! (input & ~ mask);
>
> Thanks!  That looks sufficiently safe.
> You're welcome to commit/push that.
> Or I will do it for you tomorrow.

Applied long ago.  Closing.

[Message part 3 (message/rfc822, inline)]
From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Bug-coreutils <bug-coreutils <at> gnu.org>
Subject: unportable integer expression in src/install.c
Date: Tue, 12 Oct 2010 12:39:27 -0700
Solaris 10 cc issues this warning:

"install.c", line 189: warning: initializer does not fit or is out of range: -61952

and indeed the code in question relies on undefined
behavior, as it shoehorns what may be a large negative
number into a small int variable.  Here's a patch
to src/install.c.  Maybe you should remove the "const"
while you're at it, as it's not that helpful here?

--- src/install.c~  2010-09-27 23:00:50.000000000 -0700
+++ src/install.c   2010-10-12 12:35:30.277787068 -0700
@@ -186,8 +186,8 @@ have_same_content (int a_fd, int b_fd)
 static bool
 extra_mode (mode_t input)
 {
-  const mode_t mask = ~S_IRWXUGO & ~S_IFMT;
-  return !! (input & mask);
+  const mode_t mask = S_IRWXUGO | S_IFMT;
+  return !! (input & ~ mask);
 }

 /* Return true if copy of file SRC_NAME to file DEST_NAME is necessary. */



This bug report was last modified 14 years and 98 days ago.

Previous Next


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