Browse Source

hds: Fix leak on error

CID #1402695
pull/68/head
Hugo Beauzée-Luyssen 9 years ago
parent
commit
69b5dffa52
  1. 30
      modules/stream_filter/hds/hds.c

30
modules/stream_filter/hds/hds.c

@ -1329,10 +1329,16 @@ static int parse_Manifest( stream_t *s, manifest_t *m )
case XML_READER_STARTELEM:
if( current_element_idx == 0 && element_stack[current_element_idx] == 0 ) {
if( !( element_stack[current_element_idx] = strdup( node ) ) )
{
free(media_id);
return VLC_ENOMEM;
}
} else {
if ( !( element_stack[++current_element_idx] = strdup( node ) ) )
{
free(media_id);
return VLC_ENOMEM;
}
}
break;
@ -1362,6 +1368,7 @@ static int parse_Manifest( stream_t *s, manifest_t *m )
if( media_idx == MAX_MEDIA_ELEMENTS )
{
msg_Err( (vlc_object_t*) s, "Too many media elements, quitting" );
free(media_id);
return VLC_EGENERIC;
}
@ -1370,17 +1377,26 @@ static int parse_Manifest( stream_t *s, manifest_t *m )
if( !strcmp(attr_name, "streamId" ) )
{
if( !( medias[media_idx].stream_id = strdup( attr_value ) ) )
{
free(media_id);
return VLC_ENOMEM;
}
}
else if( !strcmp(attr_name, "url" ) )
{
if( !( medias[media_idx].media_url = strdup( attr_value ) ) )
{
free(media_id);
return VLC_ENOMEM;
}
}
else if( !strcmp(attr_name, "bootstrapInfoId" ) )
{
if( !( medias[media_idx].bootstrap_id = strdup( attr_value ) ) )
{
free(media_id);
return VLC_ENOMEM;
}
}
else if( !strcmp(attr_name, "bitrate" ) )
{
@ -1397,17 +1413,26 @@ static int parse_Manifest( stream_t *s, manifest_t *m )
if( !strcmp(attr_name, "url" ) )
{
if( !( bootstraps[bootstrap_idx].url = strdup( attr_value ) ) )
{
free(media_id);
return VLC_ENOMEM;
}
}
else if( !strcmp(attr_name, "id" ) )
{
if( !( bootstraps[bootstrap_idx].id = strdup( attr_value ) ) )
return VLC_ENOMEM;
{
free(media_id);
return VLC_ENOMEM;
}
}
else if( !strcmp(attr_name, "profile" ) )
{
if( !( bootstraps[bootstrap_idx].profile = strdup( attr_value ) ) )
{
free(media_id);
return VLC_ENOMEM;
}
}
}
}
@ -1457,7 +1482,10 @@ static int parse_Manifest( stream_t *s, manifest_t *m )
vlc_b64_decode_binary( (uint8_t**)&medias[mi].metadata, start );
if ( ! medias[mi].metadata )
{
free(media_id);
return VLC_ENOMEM;
}
uint8_t *end_marker =
medias[mi].metadata + medias[mi].metadata_len - sizeof(amf_object_end);

Loading…
Cancel
Save