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) \ #define CHECK_MERGE(err, status) \
({ \ ({ \
do \ if (err) \
{ \ { \
if (err) \ __set_errno (err); \
{ \ if (err == ERANGE) \
__set_errno (err); \ status = NSS_STATUS_TRYAGAIN; \
if (err == ERANGE) \ else \
status = NSS_STATUS_TRYAGAIN; \ status = NSS_STATUS_UNAVAIL; \
else \ break; \
status = NSS_STATUS_UNAVAIL; \
break; \
} \
} \ } \
while (0); \
}) })
/* Type of the lookup function we need here. */ /* Type of the lookup function we need here. */