This is the mail archive of the cygwin-developers mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: src/winsup/cygwin ChangeLog grp.cc


On 02/20/2014 06:55 AM, corinna@cygwin.com wrote:
> CVSROOT:	/cvs/src
> Module name:	src
> Changes by:	corinna@sourceware.org	2014-02-20 13:55:57
> 
> Modified files:
> 	winsup/cygwin  : ChangeLog grp.cc 
> 
> Log message:
> 	* grp.cc (get_groups): Don't add gid to list if it's ILLEGAL_GID.
> 	(getgrouplist): Return number of groups, just like glibc.
> 
> Patches:
> http://sourceware.org/cgi-bin/cvsweb.cgi/src/winsup/cygwin/ChangeLog.diff?cvsroot=src&r1=1.6341&r2=1.6342
> http://sourceware.org/cgi-bin/cvsweb.cgi/src/winsup/cygwin/grp.cc.diff?cvsroot=src&r1=1.125&r2=1.126

This patch is wrong.

> @@ -626,7 +626,7 @@
>        }
>    if (cnt > *ngroups)
>      ret = -1;
> -  *ngroups = cnt;
> +  ret = *ngroups = cnt;

getgrouplist has the documented behavior of setting *ngroups to the
number of groups that would be returned, even if the user passed a
too-small *ngroups in to begin with - in that case, ret MUST be -1, but
you just blindly set it to a too-large value.  That is, ret must be <=
the initial value of *ngroups, and on output *ngroups must always be
positive even when ret is negative.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]