From 8e74ad50c97ba0f7624a02189377753e24d52298 Mon Sep 17 00:00:00 2001 From: Mikael Magnusson Date: Sun, 15 Sep 2024 21:16:34 +0000 Subject: lib: make copy of environ pointer Without this fix a call to getenv() without parameters destroys environ, and subsequent calls to getenv() (with or without parameter) return nothing. Fixes: #219 Signed-off-by: Mikael Magnusson --- lib.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib.c b/lib.c index e814f49..54ff354 100644 --- a/lib.c +++ b/lib.c @@ -854,21 +854,22 @@ uc_getenv(uc_vm_t *vm, size_t nargs) { uc_value_t *key = uc_fn_arg(0), *rv = NULL; extern char **environ; + char **env = environ; char *k, *v; if (!key) { rv = ucv_object_new(vm); - while (*environ) { - v = strchr(*environ, '='); + while (*env) { + v = strchr(*env, '='); if (v) { - xasprintf(&k, "%.*s", (int)(v - *environ), *environ); + xasprintf(&k, "%.*s", (int)(v - *env), *env); ucv_object_add(rv, k, ucv_string_new(v + 1)); free(k); } - environ++; + env++; } } else if (ucv_type(key) == UC_STRING) { -- cgit v1.2.3