@@ -363,12 +363,13 @@ PREFIX(make_gidlist_item)(const struct passwd *pw, int ngids, GETGROUPS_T *gids,
363363struct cache_item *
364364PREFIX (make_grlist_item )(const struct passwd * pw , char * const * unused1 )
365365{
366- char * cp ;
367- size_t groupname_len , len , ngroups , nsize , total ;
366+ size_t len , ngroups , nsize , total ;
368367 struct cache_item_grlist * grlitem ;
369368 struct group_list * grlist ;
370369 struct gid_list * gidlist ;
371370 struct group * grp = NULL ;
371+ long groupname_len ;
372+ char * cp ;
372373 int i ;
373374 debug_decl (sudo_make_grlist_item , SUDOERS_DEBUG_NSS );
374375
@@ -381,7 +382,9 @@ PREFIX(make_grlist_item)(const struct passwd *pw, char * const *unused1)
381382 }
382383
383384#ifdef _SC_LOGIN_NAME_MAX
384- groupname_len = (size_t )MAX (sysconf (_SC_LOGIN_NAME_MAX ), 32 );
385+ groupname_len = sysconf (_SC_LOGIN_NAME_MAX );
386+ if (groupname_len < 32 )
387+ groupname_len = 32 ;
385388#else
386389 groupname_len = MAX (LOGIN_NAME_MAX , 32 );
387390#endif
@@ -390,7 +393,7 @@ PREFIX(make_grlist_item)(const struct passwd *pw, char * const *unused1)
390393 nsize = strlen (pw -> pw_name ) + 1 ;
391394 total = sizeof (* grlitem ) + nsize ;
392395 total += sizeof (char * ) * (size_t )gidlist -> ngids ;
393- total += groupname_len * ( size_t ) gidlist -> ngids ;
396+ total += ( size_t )( groupname_len * gidlist -> ngids ) ;
394397
395398again :
396399 if ((grlitem = calloc (1 , total )) == NULL ) {
@@ -429,7 +432,7 @@ PREFIX(make_grlist_item)(const struct passwd *pw, char * const *unused1)
429432 if ((grp = sudo_getgrgid (gidlist -> gids [i ])) != NULL ) {
430433 len = strlen (grp -> gr_name ) + 1 ;
431434 if ((size_t )(cp - (char * )grlitem ) + len > total ) {
432- total += len + groupname_len ;
435+ total += len + ( size_t ) groupname_len ;
433436 free (grlitem );
434437 sudo_gr_delref (grp );
435438 goto again ;
0 commit comments