1
mirror of https://github.com/mpv-player/mpv synced 2024-12-28 06:03:45 +01:00

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


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@9178 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
arpi 2003-01-30 21:28:01 +00:00
parent 142ebc5c38
commit 1de6f0cf9e

View File

@ -321,14 +321,14 @@ static char* print_str(m_option_t* opt, void* val) {
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 @@ static void free_str_list(void* dst) {
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;
}