NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: bin/38201: Potential lack of null termination when copying a string



The following reply was made to PR bin/38201; it has been noted by GNATS.

From: David Holland <dholland-bugs%netbsd.org@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost, 
netbsd%happyjack.org@localhost
Subject: Re: bin/38201: Potential lack of null termination when copying a string
Date: Wed, 12 Mar 2008 13:26:00 +0000

 On Tue, Mar 11, 2008 at 06:45:02PM +0000, David Laight wrote:
  >  On Sat, Mar 08, 2008 at 10:25:46PM +0000, David Holland wrote:
  >  > On Sat, Mar 08, 2008 at 07:55:01PM +0000, netbsd%happyjack.org@localhost 
wrote:
  >  >  > [who/utmpentry.c]
  >  >  >
  >  >  > In two places, the wrong object is null-terminated after a
  >  >  > strncpy(), resulting in a potential lack of null termination.
  >  > 
  >  > Good catch... but it turns out that those null terminations are
  >  > neither necessary nor useful. I will clean up the mess...
  >  
  >  Actually they were also wrong!
  >  
  >     (void)strncpy(e->host, up->ut_host, sizeof(up->ut_host));
  >  -  e->name[sizeof(e->name) - 1] = '\0';
  >  +  e->host[sizeof(e->host) - 1] = '\0';
  >  
  >  Since e->host is guaranteed to be longer than up->ut_host, and strncpy
  >  is used because up->ut_host might not be null terminated, the correct
  >  line would be:
  >     e->host[sizeof up->ut_host - 1] = 0;
  >
  >  Of course, the code worked because the buffer had just been calloc'ed.
 
 As mrg noted, e->host[sizeof up->ut_host] = 0; would be better.
 
 This is why I changed it around the way I did...
 
 -- 
 David A. Holland
 dholland%netbsd.org@localhost
 


Home | Main Index | Thread Index | Old Index