diff options
author | Juergen Keil <jkeil@users.sourceforge.net> | 2001-10-08 18:06:34 +0000 |
---|---|---|
committer | Juergen Keil <jkeil@users.sourceforge.net> | 2001-10-08 18:06:34 +0000 |
commit | 23c8426b42bb057c82a513c2f46c432a66feb75d (patch) | |
tree | fa88c4e88fae76813e21c7d926e8d5fbef205c00 /src/input/input_dvd.c | |
parent | 7be658667c83b873e00e138da7d0a81dada8506b (diff) | |
download | xine-lib-23c8426b42bb057c82a513c2f46c432a66feb75d.tar.gz xine-lib-23c8426b42bb057c82a513c2f46c432a66feb75d.tar.bz2 |
*_get_dir broken for file lists with more than five entries due to bad
malloc for mrl_t** double indirect mrl_t arrays.
(old code was overwriting non-malloced memory)
CVS patchset: 770
CVS date: 2001/10/08 18:06:34
Diffstat (limited to 'src/input/input_dvd.c')
-rw-r--r-- | src/input/input_dvd.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/src/input/input_dvd.c b/src/input/input_dvd.c index 65d31e06a..28c20ded7 100644 --- a/src/input/input_dvd.c +++ b/src/input/input_dvd.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: input_dvd.c,v 1.31 2001/10/08 12:52:49 jkeil Exp $ + * $Id: input_dvd.c,v 1.32 2001/10/08 18:06:34 jkeil Exp $ */ #ifdef HAVE_CONFIG_H @@ -602,13 +602,12 @@ static mrl_t **dvd_plugin_get_dir (input_plugin_t *this_gen, if (!strcasecmp (&this->filelist[i][nLen-4], ".VOB")) { char str[1024]; - if(nFiles2 >= this->mrls_allocated_entries - || this->mrls_allocated_entries == 0) { + if(nFiles2 >= this->mrls_allocated_entries) { + ++this->mrls_allocated_entries; + /* note: 1 extra pointer for terminating NULL */ + this->mrls = realloc(this->mrls, (this->mrls_allocated_entries+1) * sizeof(mrl_t*)); this->mrls[nFiles2] = (mrl_t *) xmalloc(sizeof(mrl_t)); } - else { - memset(this->mrls[nFiles2], 0, sizeof(mrl_t)); - } if(this->mrls[nFiles2]->mrl) { this->mrls[nFiles2]->mrl = (char *) @@ -647,13 +646,9 @@ static mrl_t **dvd_plugin_get_dir (input_plugin_t *this_gen, /* * Freeing exceeded mrls if exists. */ - if(*nEntries > this->mrls_allocated_entries) - this->mrls_allocated_entries = *nEntries; - else if(this->mrls_allocated_entries > *nEntries) { - while(this->mrls_allocated_entries > *nEntries) { - MRL_ZERO(this->mrls[this->mrls_allocated_entries - 1]); - free(this->mrls[this->mrls_allocated_entries--]); - } + while(this->mrls_allocated_entries > *nEntries) { + MRL_ZERO(this->mrls[this->mrls_allocated_entries - 1]); + free(this->mrls[this->mrls_allocated_entries--]); } /* @@ -788,8 +783,8 @@ input_plugin_t *init_input_plugin (int iface, config_values_t *config) { check_solaris_vold_device(this); #endif - this->mrls = (mrl_t **) xmalloc(sizeof(mrl_t)); this->mrls_allocated_entries = 0; + this->mrls = xmalloc(sizeof(mrl_t*)); this->mrl = NULL; this->config = config; |