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>
(cherry picked from commit 0fceed2545)
This commit is contained in:
Florian Weimer 2025-09-12 21:33:34 +02:00
parent 9867e44cdc
commit cf926cd7fb
2 changed files with 8 additions and 11 deletions

1
NEWS
View File

@ -41,6 +41,7 @@ The following bugs were resolved with this release:
[33185] Fix double-free after allocation failure in regcomp
[33234] Use TLS initial-exec model for __libc_tsd_CTYPE_* thread variables
[33245] nptl: nptl: error in internal cancellation syscall handling
[33361] nss: Group merge does not react to ERANGE during merge
Version 2.41

View File

@ -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. */