# HG changeset patch # User reimar # Date 1117616501 0 # Node ID 2d1ad16b6021a9e0ed088b491f24142e97c77e69 # Parent d6f9191f4f828cf8f7cf2a87e6b0bc26409344cc strdup subtitle filename at a more appropriate place, fixing memleaks and double frees. diff -r d6f9191f4f82 -r 2d1ad16b6021 Gui/interface.c --- 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 diff -r d6f9191f4f82 -r 2d1ad16b6021 mencoder.c --- 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 diff -r d6f9191f4f82 -r 2d1ad16b6021 mplayer.c --- 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 diff -r d6f9191f4f82 -r 2d1ad16b6021 subreader.c --- 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;