If ifo is OK and ifo->vts_pgcit is not, then ifo could be leaked in the error path.
Signed-off-by: Erik Hovland <[email protected]> --- src/searching.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/src/searching.c b/src/searching.c index 4d354f3..aead0c3 100644 --- a/src/searching.c +++ b/src/searching.c @@ -551,7 +551,7 @@ uint32_t dvdnav_describe_title_chapters(dvdnav_t *this, int32_t title, uint64_t uint16_t parts, i; title_info_t *ptitle = NULL; ptt_info_t *ptt = NULL; - ifo_handle_t *ifo; + ifo_handle_t *ifo = NULL; pgc_t *pgc; cell_playback_t *cell; uint64_t length, *tmp=NULL; @@ -571,6 +571,7 @@ uint32_t dvdnav_describe_title_chapters(dvdnav_t *this, int32_t title, uint64_t ifo = vm_get_title_ifo(this->vm, title); if(!ifo || !ifo->vts_pgcit) { printerr("Couldn't open IFO for chosen title, exit."); + retval = 0; goto fail; } @@ -611,11 +612,14 @@ uint32_t dvdnav_describe_title_chapters(dvdnav_t *this, int32_t title, uint64_t } *duration = length; vm_ifo_close(ifo); + ifo = NULL; retval = parts; *times = tmp; fail: pthread_mutex_unlock(&this->vm_lock); + if(!retval && ifo) + vm_ifo_close(ifo); if(!retval && tmp) free(tmp); return retval; _______________________________________________ DVDnav-discuss mailing list [email protected] https://lists.mplayerhq.hu/mailman/listinfo/dvdnav-discuss
