------------------------------------------------------------
                        [BUG/PRB.] VFP 9.0 FIX - DO FORM COMMAND
                                 January 2024
                 ------------------------------------------------------------
                                     CCB



1. BUG:

     In vfp9, if we use the DO FORM command in the ON SELECTION BAR statement, sometimes VFP will crash.

     The bug only occurs in vfp9 sp2, it does not occur in vfp6, vfp7, vfp8 and vfp9 sp1.

     The bug occurs in the following commands:
     ON BAR command
     ON ERROR command
     ON ESCAPE command
     ON EXIT BAR command
     ON EXIT MENU command
     ON EXIT PAD command
     ON EXIT POPUP command
     ON KEY command
     ON KEY LABEL command
     ON PAD command
     ON PAGE command
     ON READERROR command
     ON SELECTION BAR command
     ON SELECTION MENU command
     ON SELECTION PAD command
     ON SELECTION POPUP command
     ON SHUTDOWN command


2. CAUSE:

     There are some BUGs in the following code.


3. RESOLUTION:

     We can write some code to fix the BUG.

     Label49c145 ::
             mov  esi , dword ptr [ Data93e6f0 ]                             ;0x0049c145 :        8b35f0e69300
             test esi , esi                                                  ;0x0049c14b :        85f6
             je Label49c17a                                                  ;0x0049c14d :        742b


     ;
     ;                 -------------------------------------------------
     ;                        VFP 9.0 FIX - DO FORM COMMAND
     ;                                November 2017
     ;                 -------------------------------------------------
     ;                                     CCB
     ;
     ; If we use the DO FORM command in the ON SELECTION BAR statement, sometimes VFP will crash.
     ;
     ; 2017/11/30, by ccb
     ;

             cmp dword ptr vfpa_sys9112_data,00h
             je Label49c14f
             mov  eax , dword ptr [esi]
             cmp  dword ptr [eax] , 00h
             jge Label49c158
             cmp  dword ptr [ eax + 12 ] , 00h
             je Label49c17a


     Label49c14f ::
             call Fun54977a                                                  ;0x0049c14f :        e826d60a00
             test eax , eax                                                  ;0x0049c154 :        85c0
             je Label49c17a                                                  ;0x0049c156 :        7422

     Label49c158 ::
             mov eax ,  dword ptr [ Data93e6f0 ]                             ;0x0049c158 :        a1f0e69300
             mov  ecx , dword ptr [eax]                                      ;0x0049c15d :        8b08
             mov  ecx , dword ptr [ecx]                                      ;0x0049c15f :        8b09
             lea eax ,  dword ptr [ ebp - 24 ]                               ;0x0049c161 :        8d45e8
             call Fun41975b                                                  ;0x0049c164 :        e8f2d5f7ff
             push edi                                                        ;0x0049c169 :        57
             lea edi ,  dword ptr [ ebp - 24 ]                               ;0x0049c16a :        8d7de8
             call Fun433e2f                                                  ;0x0049c16d :        e8bd7cf9ff
             test eax , eax                                                  ;0x0049c172 :        85c0
             jne Label5b7616                                                 ;0x0049c174 :        0f859cb41100

     Label49c17a ::
             mov  eax , dword ptr [ ebp - 32 ]                               ;0x0049c17a :        8b45e0
             test eax , eax                                                  ;0x0049c17d :        85c0
             mov  edi , dword ptr [ ebp + 0108h ]                            ;0x0049c17f :        8bbd08010000
             mov  ebx , dword ptr [ ebp + 0110h ]                            ;0x0049c185 :        8b9d10010000
             je Label5098c3                                                  ;0x0049c18b :        0f8432d70600
             mov edx , ebx                                                   ;0x0049c191 :        8bd3
             mov  byte ptr [ ebp - 28 ] , 050h                               ;0x0049c193 :        c645e450
             mov  dword ptr [edx] , offset Data93d5c0                                 ;0x0049c197 :        c702c0d59300
             jmp Label5098c3                                                 ;0x0049c19d :        e921d70600


4. APPLIES TO:

     VFP 9.0.0.4611 (SP2)
     VFP 9.0.0.5015 (SP2)
     VFP 9.0.0.5411 (SP2)
     VFP 9.0.0.5721 (SP2)
     VFP 9.0.0.5815 (SP2)
     VFP 9.0.0.6303 (SP2)
     VFP 9.0.0.6602 (SP2)
     VFP 9.0.0.7423 (SP2)

     The bug has been fixed in VFP Advanced.


5. REFERENCE WEBSITES:

     1, baiyujia.com:
     http://www.baiyujia.com
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix230.asp

     2, foxite.com:
     https://www.foxite.com/archives/another-vfp9-sp2-bug-0000150951.htm


6. OTHER:

     For reference only, there is no guarantees.

     Any questions or suggestions, please send me an email at ccb2000@163.com.