46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| commit 0fceed254559836b57ee05188deac649bc505d05
 | |
| Author: Florian Weimer <fweimer@redhat.com>
 | |
| Date:   Fri Sep 12 21:33:34 2025 +0200
 | |
| 
 | |
|     nss: Group merge does not react to ERANGE during merge (bug 33361)
 | |
|     
 | |
|     The break statement in CHECK_MERGE is expected to exit the surrounding
 | |
|     while loop, not the do-while loop with in the macro.  Remove the
 | |
|     do-while loop from the macro.  It is not needed to turn the macro
 | |
|     expansion into a single statement due to the way CHECK_MERGE is used
 | |
|     (and the statement expression would cover this anyway).
 | |
|     
 | |
|     Reviewed-by: Collin Funk <collin.funk1@gmail.com>
 | |
| 
 | |
| diff --git a/nss/getXXbyYY_r.c b/nss/getXXbyYY_r.c
 | |
| index eae6c3480e..2b0735fb6a 100644
 | |
| --- a/nss/getXXbyYY_r.c
 | |
| +++ b/nss/getXXbyYY_r.c
 | |
| @@ -157,19 +157,15 @@ __merge_einval (LOOKUP_TYPE *a,
 | |
|  
 | |
|  #define CHECK_MERGE(err, status)		\
 | |
|    ({						\
 | |
| -    do						\
 | |
| +    if (err)					\
 | |
|        {						\
 | |
| -	if (err)				\
 | |
| -	  {					\
 | |
| -	    __set_errno (err);			\
 | |
| -	    if (err == ERANGE)			\
 | |
| -	      status = NSS_STATUS_TRYAGAIN;	\
 | |
| -	    else				\
 | |
| -	      status = NSS_STATUS_UNAVAIL;	\
 | |
| -	    break;				\
 | |
| -	  }					\
 | |
| +	__set_errno (err);			\
 | |
| +	if (err == ERANGE)			\
 | |
| +	  status = NSS_STATUS_TRYAGAIN;		\
 | |
| +	else					\
 | |
| +	  status = NSS_STATUS_UNAVAIL;		\
 | |
| +	break;					\
 | |
|        }						\
 | |
| -    while (0);					\
 | |
|    })
 | |
|  
 | |
|  /* Type of the lookup function we need here.  */
 |