Update of /cvsroot/mplayer/main In directory mail:/var/tmp.root/cvs-serv30703 Modified Files: m_option.c Log Message: disable free() in string and string_list parsers. yes, it's a hack (and a little memleak), but i can explain :) [note it's just a few kB memleak, but it's the price of stability without full code review/audit - there are hunderds of possible double free()] the old config parser didn't free() strings/stringlists, but didn't even allocate them by default. the new one always free(), and it causes memcorruption/sig11 at cases like this: char* dvd_device="/dev/dvd"; {"dvd-device", &dvd_device, CONF_TYPE_STRING, 0, 0, 0, NULL}, since string constansts (allocated in .TEXT segment) cannot be free()'d Index: m_option.c =================================================================== RCS file: /cvsroot/mplayer/main/m_option.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- m_option.c 3 Jan 2003 12:40:09 -0000 1.5 +++ m_option.c 30 Jan 2003 21:28:01 -0000 1.6 @@ -321,14 +321,14 @@ static void copy_str(m_option_t* opt,void* dst, void* src) { if(dst && src) { - if(VAL(dst)) free(VAL(dst)); +// if(VAL(dst)) free(VAL(dst)); //FIXME!!! VAL(dst) = VAL(src) ? strdup(VAL(src)) : NULL; } } static void free_str(void* src) { if(src && VAL(src)){ - free(VAL(src)); +// free(VAL(src)); //FIXME!!! VAL(src) = NULL; } } @@ -365,10 +365,10 @@ if(!dst || !VAL(dst)) return; d = VAL(dst); - - for(i = 0 ; d[i] != NULL ; i++) - free(d[i]); - free(d); +// FIXME!!! +// for(i = 0 ; d[i] != NULL ; i++) +// free(d[i]); +// free(d); VAL(dst) = NULL; }