[PATCH][Trac 2311] codec_path mem leak

Alexander Strasser <[email protected]>
Newsgroups gmane.comp.video.mplayer.devel
Message-ID <[email protected]>
Hello all,

while investigating the leaks pointed out in ticket #2311, I found
that the attached patch fixes the remaining leak.

The current code seems pretty wrong. At least, as I understand it,
the function set_codec_path ever only got called once. The implementation
combined with exporting the codec_path global var seems not solid at all.

Still I feel like I am missing something...
It seems to easy to be true, maybe some of you can have a look or test.
I only tested by debug printing the value of codec_path after common_init
in mplayer.c, and not actually loading a binary codec.


  Alexander

_______________________________________________
MPlayer-dev-eng mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/mplayer-dev-eng
0001-mpcommon-common_init-Avoid-creating-a-mem-leak-of-co.patch (text/plain, 1.9 KB)
From 574fb28e7f6411300776d06bc62d23c5bb82da24 Mon Sep 17 00:00:00 2001
From: Alexander Strasser <[email protected]>
Date: Wed, 4 Jan 2017 23:45:30 +0100
Subject: [PATCH] mpcommon/common_init: Avoid creating a mem leak of codec_path

The codec path is set by the config system anyway. Setting it again
and assuming the original value wasn't already duplicated by the
config system just creates a mem leak.

This change also simplifies the code because function set_codec_path
isn't needed anymore.

Fixes part of ticket 2311
---
 mpcommon.c |  3 ---
 path.c     | 16 ----------------
 path.h     |  1 -
 3 files changed, 20 deletions(-)

diff --git a/mpcommon.c b/mpcommon.c
index ebc9711e6..211828c49 100644
--- a/mpcommon.c
+++ b/mpcommon.c
@@ -588,9 +588,6 @@ int common_init(void)
     set_priority();
 #endif
 
-    if (codec_path)
-        set_codec_path(codec_path);
-
     /* Check codecs.conf. */
     if (!codecs_file || !parse_codec_cfg(codecs_file)) {
         char *conf_path = get_path("codecs.conf");
diff --git a/path.c b/path.c
index b8d9335fe..e6287d220 100644
--- a/path.c
+++ b/path.c
@@ -174,22 +174,6 @@ void set_path_env(void)
 
 char *codec_path = BINARY_CODECS_PATH;
 
-static int needs_free = 0;
-
-void set_codec_path(const char *path)
-{
-    if (needs_free)
-        free(codec_path);
-    if (path == 0) {
-        codec_path = BINARY_CODECS_PATH;
-        needs_free = 0;
-        return;
-    }
-    codec_path = malloc(strlen(path) + 1);
-    strcpy(codec_path, path);
-    needs_free = 1;
-}
-
 /**
  * @brief Returns the basename substring of a path.
  */
diff --git a/path.h b/path.h
index 1389fc491..0f4594340 100644
--- a/path.h
+++ b/path.h
@@ -25,7 +25,6 @@ extern char *codec_path;
 
 char *get_path(const char *filename);
 void set_path_env(void);
-void set_codec_path(const char *path);
 const char *mp_basename(const char *path);
 char *mp_dirname(const char *path);
 char *mp_path_join(const char *base, const char *new_path);
-- 
2.11.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.