pseudo_get_value() returns newly allocated memory that the caller must free,
so add some free() calls.

Signed-off-by: Ross Burton <[email protected]>
---
 pseudo.c        | 4 +++-
 pseudo_client.c | 9 +++++++++
 pseudo_util.c   | 2 ++
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/pseudo.c b/pseudo.c
index 55f0f18..f2e2f87 100644
--- a/pseudo.c
+++ b/pseudo.c
@@ -245,10 +245,12 @@ main(int argc, char *argv[]) {
        /* Options are processed, preserve them... */
        pseudo_set_value("PSEUDO_OPTS", opts);
 
-       if (!pseudo_get_prefix(argv[0])) {
+       s = pseudo_get_prefix(argv[0]);
+       if (!s) {
                pseudo_diag("Can't figure out prefix.  Set PSEUDO_PREFIX or 
invoke with full path.\n");
                exit(PSEUDO_EXIT_PSEUDO_PREFIX);
        }
+       free(s);
 
        /* move database */
        if (opt_m || opt_M) {
diff --git a/pseudo_client.c b/pseudo_client.c
index eeb1fdc..6310b99 100644
--- a/pseudo_client.c
+++ b/pseudo_client.c
@@ -431,6 +431,7 @@ pseudo_profile_report(void) {
 void
 pseudo_init_client(void) {
        char *env;
+       int need_free = 0;
 
        pseudo_antimagic();
        pseudo_new_pid();
@@ -450,9 +451,11 @@ pseudo_init_client(void) {
         * or it may have gone away, in which case we'd enable
         * pseudo (and cause it to reinit the defaults).
         */
+       need_free = 0;
        env = getenv("PSEUDO_DISABLED");
        if (!env) {
                env = pseudo_get_value("PSEUDO_DISABLED");
+               need_free = 1;
        }
        if (env) {
                int actually_disabled = 1;
@@ -487,15 +490,19 @@ pseudo_init_client(void) {
        } else {
                pseudo_set_value("PSEUDO_DISABLED", "0");
        }
+       if (need_free)
+               free(env);
 
        /* ALLOW_FSYNC is here because some crazy hosts will otherwise
         * report incorrect values for st_size/st_blocks. I can sort of
         * understand st_blocks, but bogus values for st_size? Not cool,
         * dudes, not cool.
         */
+       need_free = 0;
        env = getenv("PSEUDO_ALLOW_FSYNC");
        if (!env) {
                env = pseudo_get_value("PSEUDO_ALLOW_FSYNC");
+               need_free = 1;
        } else {
                pseudo_set_value("PSEUDO_ALLOW_FSYNC", env);
        }
@@ -504,6 +511,8 @@ pseudo_init_client(void) {
        } else {
                pseudo_allow_fsync = 0;
        }
+       if (need_free)
+               free(env);
 
        /* in child processes, PSEUDO_UNLOAD may become set to
         * some truthy value, in which case we're being asked to
diff --git a/pseudo_util.c b/pseudo_util.c
index 51c07c2..b6980c2 100644
--- a/pseudo_util.c
+++ b/pseudo_util.c
@@ -967,6 +967,7 @@ pseudo_setupenv() {
                }
                snprintf(newenv, len, "%s:%s64", libdir_path, libdir_path);
                SETENV(PRELINK_PATH, newenv, 1);
+               free(newenv);
        } else if (!strstr(ld_library_path, libdir_path)) {
                size_t len = strlen(ld_library_path) + 1 + strlen(libdir_path) 
+ 1 + (strlen(libdir_path) + 2) + 1;
                char *newenv = malloc(len);
@@ -975,6 +976,7 @@ pseudo_setupenv() {
                }
                snprintf(newenv, len, "%s:%s:%s64", ld_library_path, 
libdir_path, libdir_path);
                SETENV(PRELINK_PATH, newenv, 1);
+               free(newenv);
        } else {
                /* nothing to do, ld_library_path exists and contains
                 * our preferred path */
-- 
2.25.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#146545): 
https://lists.openembedded.org/g/openembedded-core/message/146545
Mute This Topic: https://lists.openembedded.org/mt/79523829/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to