edje_cc: fix segfault when a program attempts to play a non-registered sound

Summary:
When an edje program attempted to play a sound that was not registered
(e.g. in a sounds{} block), edje_cc would segfault instead of throwing
an error.

@fix

Reviewers: cedric

Reviewed By: cedric

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D3171

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
Jean Guyomarc'h 2015-10-12 12:04:38 -07:00 committed by Cedric BAIL
parent b71410972e
commit b2fb58b915
1 changed files with 25 additions and 12 deletions

View File

@ -12781,6 +12781,7 @@ st_collections_group_programs_program_action(void)
Edje_Part_Collection *pc;
Edje_Program *ep;
int i;
Eina_Bool found = EINA_FALSE;
pc = eina_list_data_get(eina_list_last(edje_collections));
if (sequencing)
@ -12828,16 +12829,22 @@ st_collections_group_programs_program_action(void)
else if (ep->action == EDJE_ACTION_TYPE_SOUND_SAMPLE)
{
ep->sample_name = parse_str(1);
for (i = 0; i < (int)edje_file->sound_dir->samples_count; i++)
if (edje_file->sound_dir)
{
if (!strcmp(edje_file->sound_dir->samples[i].name, ep->sample_name))
break;
if (i == (int)(edje_file->sound_dir->samples_count - 1))
for (i = 0; i < (int)edje_file->sound_dir->samples_count; i++)
{
ERR("No Sample name %s exist.", ep->sample_name);
exit(-1);
if (!strcmp(edje_file->sound_dir->samples[i].name, ep->sample_name))
{
found = EINA_TRUE;
break;
}
}
}
if (!found)
{
ERR("No Sample name %s exist.", ep->sample_name);
exit(-1);
}
ep->speed = parse_float_range(2, 0.0, 100.0);
if (get_arg_count() >= 4)
ep->channel = parse_enum(3,
@ -12853,16 +12860,22 @@ st_collections_group_programs_program_action(void)
else if (ep->action == EDJE_ACTION_TYPE_SOUND_TONE)
{
ep->tone_name = parse_str(1);
for (i = 0; i < (int)edje_file->sound_dir->tones_count; i++)
if (edje_file->sound_dir)
{
if (!strcmp(edje_file->sound_dir->tones[i].name, ep->tone_name))
break;
if (i == (int)(edje_file->sound_dir->tones_count - 1))
for (i = 0; i < (int)edje_file->sound_dir->tones_count; i++)
{
ERR("No Tone name %s exist.", ep->tone_name);
exit(-1);
if (!strcmp(edje_file->sound_dir->tones[i].name, ep->tone_name))
{
found = EINA_TRUE;
break;
}
}
}
if (!found)
{
ERR("No Tone name %s exist.", ep->tone_name);
exit(-1);
}
ep->duration = parse_float_range(2, 0.1, 10.0);
}
else if (ep->action == EDJE_ACTION_TYPE_VIBRATION_SAMPLE)