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: