# HG changeset patch # User nicodvb # Date 1208680142 0 # Node ID fb2fbd4cfbf6168b0d2fa7ef09942c3126d8d41c # Parent a8d1de20346f8b4e5ef14a8c8f3591b623fa46d2 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 diff -r a8d1de20346f -r fb2fbd4cfbf6 navigation.c --- 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); diff -r a8d1de20346f -r fb2fbd4cfbf6 vm/vm.c --- 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: