]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
nss: Group merge does not react to ERANGE during merge (bug 33361)
authorFlorian Weimer <fweimer@redhat.com>
Fri, 12 Sep 2025 19:33:34 +0000 (21:33 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Fri, 19 Sep 2025 07:19:17 +0000 (09:19 +0200)
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 0fceed254559836b57ee05188deac649bc505d05)

NEWS
nss/getXXbyYY_r.c

diff --git a/NEWS b/NEWS
index 69aa600c6de09dcdd4b1398b16295325d05bfbba..06c27a8e1798e2f91ebeed1146b58ea7ff0de91e 100644 (file)
--- 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
 \f
 Version 2.42
 
index eae6c3480ef645ea1eda902587cbba8805f32fa5..2b0735fb6a83e2ec6692829133ad1e2cbaf6982a 100644 (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.  */