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>
This commit is contained in:
Florian Weimer 2025-09-12 21:33:34 +02:00
parent cae3c9e3a1
commit 0fceed2545
1 changed files with 7 additions and 11 deletions

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