Commit 4ed67d84 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

AllocatePluginFile: handle *alloc() errors properly

parent df9f30c2
...@@ -1171,66 +1171,65 @@ static int AllocatePluginFile( vlc_object_t * p_this, module_bank_t *p_bank, ...@@ -1171,66 +1171,65 @@ static int AllocatePluginFile( vlc_object_t * p_this, module_bank_t *p_bank,
p_module = AllocatePlugin( p_this, psz_file ); p_module = AllocatePlugin( p_this, psz_file );
} }
else else
/* If junk dll, don't try to load it */
if( p_cache_entry->b_junk )
return -1;
else
{ {
/* If junk dll, don't try to load it */ module_config_t *p_item = NULL, *p_end = NULL;
if( p_cache_entry->b_junk )
{
p_module = NULL;
}
else
{
module_config_t *p_item = NULL, *p_end = NULL;
p_module = p_cache_entry->p_module; p_module = p_cache_entry->p_module;
p_module->b_loaded = false; p_module->b_loaded = false;
/* For now we force loading if the module's config contains /* For now we force loading if the module's config contains
* callbacks or actions. * callbacks or actions.
* Could be optimized by adding an API call.*/ * Could be optimized by adding an API call.*/
for( p_item = p_module->p_config, p_end = p_item + p_module->confsize; for( p_item = p_module->p_config, p_end = p_item + p_module->confsize;
p_item < p_end; p_item++ ) p_item < p_end; p_item++ )
{
if( p_item->pf_callback || p_item->i_action )
{ {
if( p_item->pf_callback || p_item->i_action ) p_module = AllocatePlugin( p_this, psz_file );
{ break;
p_module = AllocatePlugin( p_this, psz_file );
break;
}
} }
if( p_module == p_cache_entry->p_module )
p_cache_entry->b_used = true;
} }
if( p_module == p_cache_entry->p_module )
p_cache_entry->b_used = true;
} }
if( p_module ) if( p_module == NULL )
{ return -1;
/* Everything worked fine !
* The module is ready to be added to the list. */
p_module->b_builtin = false;
/* msg_Dbg( p_this, "plugin \"%s\", %s",
p_module->psz_object_name, p_module->psz_longname ); */
p_module->next = p_bank->head;
p_bank->head = p_module;
if( !p_module_bank->b_cache )
return 0;
/* Add entry to cache */
p_bank->pp_cache =
realloc( p_bank->pp_cache, (p_bank->i_cache + 1) * sizeof(void *) );
p_bank->pp_cache[p_bank->i_cache] = malloc( sizeof(module_cache_t) );
if( !p_bank->pp_cache[p_bank->i_cache] )
return -1;
p_bank->pp_cache[p_bank->i_cache]->psz_file = strdup( psz_file );
p_bank->pp_cache[p_bank->i_cache]->i_time = i_file_time;
p_bank->pp_cache[p_bank->i_cache]->i_size = i_file_size;
p_bank->pp_cache[p_bank->i_cache]->b_junk = p_module ? 0 : 1;
p_bank->pp_cache[p_bank->i_cache]->b_used = true;
p_bank->pp_cache[p_bank->i_cache]->p_module = p_module;
p_bank->i_cache++;
}
return p_module ? 0 : -1; /* Everything worked fine !
* The module is ready to be added to the list. */
p_module->b_builtin = false;
/* msg_Dbg( p_this, "plugin \"%s\", %s",
p_module->psz_object_name, p_module->psz_longname ); */
p_module->next = p_bank->head;
p_bank->head = p_module;
if( !p_module_bank->b_cache )
return 0;
/* Add entry to cache */
module_cache_t **pp_cache = p_bank->pp_cache;
pp_cache = realloc( pp_cache, (p_bank->i_cache + 1) * sizeof(void *) );
if( pp_cache == NULL )
return -1;
pp_cache[p_bank->i_cache] = malloc( sizeof(module_cache_t) );
if( pp_cache[p_bank->i_cache] == NULL )
return -1;
pp_cache[p_bank->i_cache]->psz_file = strdup( psz_file );
pp_cache[p_bank->i_cache]->i_time = i_file_time;
pp_cache[p_bank->i_cache]->i_size = i_file_size;
pp_cache[p_bank->i_cache]->b_junk = p_module ? 0 : 1;
pp_cache[p_bank->i_cache]->b_used = true;
pp_cache[p_bank->i_cache]->p_module = p_module;
p_bank->pp_cache = pp_cache;
p_bank->i_cache++;
return 0;
} }
/***************************************************************************** /*****************************************************************************
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment