OSDN Git Service

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