[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCHv2 2/2] envlist.c: handle strdup failure
From: |
Jim Meyering |
Subject: |
[Qemu-devel] [PATCHv2 2/2] envlist.c: handle strdup failure |
Date: |
Tue, 22 May 2012 11:50:10 +0200 |
From: Jim Meyering <address@hidden>
Without this, envlist_to_environ may silently fail to copy all
strings into the destination buffer, and both callers would leak
any env strings allocated after a failing strdup, because the
freeing code stops at the first NULL pointer.
Signed-off-by: Jim Meyering <address@hidden>
---
envlist.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/envlist.c b/envlist.c
index be0addb..7532091 100644
--- a/envlist.c
+++ b/envlist.c
@@ -234,8 +234,16 @@ envlist_to_environ(const envlist_t *envlist, size_t *count)
return (NULL);
for (entry = envlist->el_entries.lh_first; entry != NULL;
- entry = entry->ev_link.le_next) {
- *(penv++) = strdup(entry->ev_var);
+ entry = entry->ev_link.le_next, penv++) {
+ *penv = strdup(entry->ev_var);
+ if (*penv == NULL) {
+ char **e = env;
+ while (e <= penv) {
+ free(*e++);
+ }
+ free(env);
+ return NULL;
+ }
}
*penv = NULL; /* NULL terminate the list */
--
1.7.10.2.552.gaa3bb87