Mercurial > libdvdnav.hg
changeset 344:fb2fbd4cfbf6 src
in get_PGCIT() check the validity of vm->vtsi before risking to dereference NULL;
also change dvdnav_get_current_menu() accordingly.
Patch by Erik Hovland - erik hovland org
author | nicodvb |
---|---|
date | Sun, 20 Apr 2008 08:29:02 +0000 |
parents | a8d1de20346f |
children | f051b111ef50 |
files | navigation.c vm/vm.c |
diffstat | 2 files changed, 7 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/navigation.c Sun Apr 20 08:18:52 2008 +0000 +++ b/navigation.c Sun Apr 20 08:29:02 2008 +0000 @@ -104,7 +104,10 @@ if ( (this->vm->state.domain == VTSM_DOMAIN) || (this->vm->state.domain == VMGM_DOMAIN) ) { /* Get current Menu ID: into *part. */ - vm_get_current_menu(this->vm, part); + if(! vm_get_current_menu(this->vm, part)) { + pthread_mutex_unlock(&this->vm_lock); + return DVDNAV_STATUS_ERR; + } if (*part > -1) { *title = 0; pthread_mutex_unlock(&this->vm_lock);
--- a/vm/vm.c Sun Apr 20 08:18:52 2008 +0000 +++ b/vm/vm.c Sun Apr 20 08:29:02 2008 +0000 @@ -1823,13 +1823,15 @@ /* Uses state to decide what to return */ static pgcit_t* get_PGCIT(vm_t *vm) { - pgcit_t *pgcit; + pgcit_t *pgcit = NULL; switch ((vm->state).domain) { case VTS_DOMAIN: + if(!vm->vtsi) return NULL; pgcit = vm->vtsi->vts_pgcit; break; case VTSM_DOMAIN: + if(!vm->vtsi) return NULL; pgcit = get_MENU_PGCIT(vm, vm->vtsi, (vm->state).registers.SPRM[0]); break; case VMGM_DOMAIN: