changeset 15603:2d1ad16b6021

strdup subtitle filename at a more appropriate place, fixing memleaks and double frees.
author reimar
date Wed, 01 Jun 2005 09:01:41 +0000
parents d6f9191f4f82
children 5c23a21cc78c
files Gui/interface.c mencoder.c mplayer.c subreader.c
diffstat 4 files changed, 18 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/Gui/interface.c	Tue May 31 22:35:40 2005 +0000
+++ b/Gui/interface.c	Wed Jun 01 09:01:41 2005 +0000
@@ -486,7 +486,7 @@
  if ( name )
   {
    mp_msg( MSGT_GPLAYER,MSGL_INFO,MSGTR_LoadingSubtitles,name );
-   subdata=sub_read_file( gstrdup( name ), guiIntfStruct.FPS );
+   subdata=sub_read_file( name, guiIntfStruct.FPS );
    if ( !subdata ) mp_msg( MSGT_GPLAYER,MSGL_ERR,MSGTR_CantLoadSub,name );
    sub_name = (malloc(2 * sizeof(char*))); //when mplayer will be restarted 
    sub_name[0] = strdup(name);             //sub_name[0] will be read 
--- a/mencoder.c	Tue May 31 22:35:40 2005 +0000
+++ b/mencoder.c	Wed Jun 01 09:01:41 2005 +0000
@@ -591,8 +591,17 @@
     if(!subdata) mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantLoadSub,sub_name[0]);
   } else
   if(sub_auto) { // auto load sub file ...
-    subdata=sub_read_file( filename ? sub_filenames( get_path("sub/"), filename )[0]
-	                              : "default.sub", sh_video->fps );
+    char **tmp = NULL;
+    int i = 0;
+    if (filename) {
+      char *psub = get_path( "sub/" );
+      tmp = sub_filenames((psub ? psub : ""), filename);
+      free(psub);
+    }
+    subdata=sub_read_file(tmp ? tmp[0] : "default.sub", sh_video->fps);
+    while (tmp && tmp[i])
+      free(tmp[i++]);
+    free(tmp);
   }
 #endif	
 
--- a/mplayer.c	Tue May 31 22:35:40 2005 +0000
+++ b/mplayer.c	Wed Jun 01 09:01:41 2005 +0000
@@ -1914,18 +1914,18 @@
   if(sub_auto) { // auto load sub file ...
     char *psub = get_path( "sub/" );
     char **tmp = sub_filenames((psub ? psub : ""), filename);
-    char **tmp2 = tmp;
+    int i = 0;
     free(psub); // release the buffer created by get_path() above
-    while (*tmp2)
-        add_subtitles (*tmp2++, sh_video->fps, 0);
+    while (tmp[i]) {
+        add_subtitles (tmp[i], sh_video->fps, 0);
+        free(tmp[i++]);
+    }
     free(tmp);
     if (set_of_sub_size == 0)
     {
         add_subtitles (mem_ptr=get_path("default.sub"), sh_video->fps, 1);
     free(mem_ptr); // release the buffer created by get_path()
     }
-    if (set_of_sub_size > 0)
-        add_subtitles (NULL, sh_video->fps, 1);
   }
   if (set_of_sub_size > 0)  {
       // setup global sub numbering
--- a/subreader.c	Tue May 31 22:35:40 2005 +0000
+++ b/subreader.c	Wed Jun 01 09:01:41 2005 +0000
@@ -1350,7 +1350,6 @@
 #endif
 
 sub_data* sub_read_file (char *filename, float fps) {
-        //filename is assumed to be malloc'ed,  free() is used in sub_free()
     FILE *fd;
     int n_max, n_first, i, j, sub_first, sub_orig;
     subtitle *first, *second, *sub, *return_sub;
@@ -1718,7 +1717,7 @@
 }
     if (return_sub == NULL) return NULL;
     subt_data = (sub_data *)malloc(sizeof(sub_data));
-    subt_data->filename = filename;
+    subt_data->filename = strdup(filename);
     subt_data->sub_uses_time = uses_time;
     subt_data->sub_num = sub_num;
     subt_data->sub_errs = sub_errs;