1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
diff -Naur libdvdnav.orig/src/vm/vm.c libdvdnav/src/vm/vm.c
--- libdvdnav.orig/src/vm/vm.c 2009-10-29 09:10:44.836643320 -0700
+++ libdvdnav/src/vm/vm.c 2009-11-16 11:10:07.527247268 -0800
@@ -585,6 +585,9 @@
switch(menuid) {
case DVD_MENU_Title:
case DVD_MENU_Escape:
+ if(vm->vmgi == NULL || vm->vmgi->pgci_ut == NULL) {
+ goto fail;
+ }
(vm->state).domain = VMGM_DOMAIN;
break;
case DVD_MENU_Root:
@@ -592,6 +595,9 @@
case DVD_MENU_Audio:
case DVD_MENU_Angle:
case DVD_MENU_Part:
+ if(vm->vtsi == NULL || vm->vtsi->pgci_ut == NULL) {
+ goto fail;
+ }
(vm->state).domain = VTSM_DOMAIN;
break;
}
@@ -606,6 +612,7 @@
break;
}
+fail:
return 0;
}
@@ -1488,6 +1495,10 @@
/* Allowed from anywhere except the VTS Title domain */
/* Stop SPRM9 Timer and any GPRM counters */
assert((vm->state).domain != VTS_DOMAIN); /* ?? */
+ if(vm->vmgi == NULL || vm->vmgi->pgci_ut == NULL) {
+ link_values.command = Exit;
+ break;
+ }
(vm->state).domain = VMGM_DOMAIN;
if(!set_MENU(vm, link_values.data1))
assert(0);
@@ -1504,14 +1515,22 @@
if (link_values.data1 != (vm->state).vtsN) {
/* the normal case */
assert((vm->state).domain == VMGM_DOMAIN || (vm->state).domain == FP_DOMAIN); /* ?? */
- (vm->state).domain = VTSM_DOMAIN;
if (!ifoOpenNewVTSI(vm, vm->dvd, link_values.data1)) /* Also sets (vm->state).vtsN */
assert(0);
+ if(vm->vtsi == NULL || vm->vtsi->pgci_ut == NULL) {
+ link_values.command = Exit;
+ break;
+ }
+ (vm->state).domain = VTSM_DOMAIN;
} else {
/* This happens on some discs like "Captain Scarlet & the Mysterons" or
* the German RC2 of "Anatomie" in VTSM. */
assert((vm->state).domain == VTSM_DOMAIN ||
(vm->state).domain == VMGM_DOMAIN || (vm->state).domain == FP_DOMAIN); /* ?? */
+ if(vm->vtsi == NULL || vm->vtsi->pgci_ut == NULL) {
+ link_values.command = Exit;
+ break;
+ }
(vm->state).domain = VTSM_DOMAIN;
}
} else {
@@ -1533,6 +1552,10 @@
/* set_PGCN:data1 */
/* Stop SPRM9 Timer and any GPRM counters */
assert((vm->state).domain != VTS_DOMAIN); /* ?? */
+ if(vm->vmgi == NULL || vm->vmgi->pgci_ut == NULL) {
+ link_values.command = Exit;
+ break;
+ }
(vm->state).domain = VMGM_DOMAIN;
if(!set_PGCN(vm, link_values.data1))
assert(0);
@@ -1552,6 +1575,10 @@
/* set_RSMinfo:data2 */
assert((vm->state).domain == VTS_DOMAIN); /* ?? */
/* Must be called before domain is changed */
+ if(vm->vmgi == NULL || vm->vmgi->pgci_ut == NULL) {
+ link_values.command = Exit;
+ break;
+ }
set_RSMinfo(vm, link_values.data2, /* We dont have block info */ 0);
(vm->state).domain = VMGM_DOMAIN;
if(!set_MENU(vm, link_values.data1))
@@ -1563,6 +1590,10 @@
/* set_RSMinfo:data2 */
assert((vm->state).domain == VTS_DOMAIN); /* ?? */
/* Must be called before domain is changed */
+ if(vm->vtsi == NULL || vm->vtsi->pgci_ut == NULL) {
+ link_values.command = Exit;
+ break;
+ }
set_RSMinfo(vm, link_values.data2, /* We dont have block info */ 0);
(vm->state).domain = VTSM_DOMAIN;
if(!set_MENU(vm, link_values.data1))
@@ -1574,6 +1605,10 @@
/* set_RSMinfo:data2 */
assert((vm->state).domain == VTS_DOMAIN); /* ?? */
/* Must be called before domain is changed */
+ if(vm->vmgi == NULL || vm->vmgi->pgci_ut == NULL) {
+ link_values.command = Exit;
+ break;
+ }
set_RSMinfo(vm, link_values.data2, /* We dont have block info */ 0);
(vm->state).domain = VMGM_DOMAIN;
if(!set_PGCN(vm, link_values.data1))
|