From: Florian Weimer Date: Fri, 12 Sep 2025 19:33:34 +0000 (+0200) Subject: nss: Group merge does not react to ERANGE during merge (bug 33361) X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=46b4e37c9e0619d0cf065ba207c29996b326a06f;p=thirdparty%2Fglibc.git 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 (cherry picked from commit 0fceed254559836b57ee05188deac649bc505d05) --- diff --git a/NEWS b/NEWS index 69aa600c6d..06c27a8e17 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,7 @@ The following bugs were resolved with this release: [32994] stdlib: resolve a double lock init issue after fork [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.42 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. */