From: Alejandro Colomar Date: Sun, 12 May 2024 23:24:47 +0000 (+0200) Subject: lib/gshadow.c: build_list(): Fix forever loop on ENOMEM X-Git-Tag: 4.17.0-rc1~190 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=056f1d03ee93b47ad7b2338430580c7edf3e5108;p=thirdparty%2Fshadow.git lib/gshadow.c: build_list(): Fix forever loop on ENOMEM Before this patch, the function looped while (s != NULL && *s != '\0'). However, nothing was modifying that string if REALLOC() failed, so the loop was forever. Fixes: 8e167d28afd6 ("[svn-upgrade] Integrating new upstream version, shadow (4.0.8)") Signed-off-by: Alejandro Colomar --- diff --git a/lib/gshadow.c b/lib/gshadow.c index 95b9cc73b..407794958 100644 --- a/lib/gshadow.c +++ b/lib/gshadow.c @@ -39,19 +39,23 @@ static /*@null@*/char **build_list (char *s, char **list[], size_t * nlist) while (s != NULL && *s != '\0') { size = (nelem + 1) * sizeof (ptr); ptr = REALLOC(*list, size, char *); - if (NULL != ptr) { - ptr[nelem] = strsep(&s, ","); - nelem++; - *list = ptr; - *nlist = nelem; - } + if (ptr == NULL) + return NULL; + + ptr[nelem] = strsep(&s, ","); + nelem++; + *list = ptr; + *nlist = nelem; } + size = (nelem + 1) * sizeof (ptr); ptr = REALLOC(*list, size, char *); - if (NULL != ptr) { - ptr[nelem] = NULL; - *list = ptr; - } + if (ptr == NULL) + return NULL; + + ptr[nelem] = NULL; + *list = ptr; + return ptr; }