------------------------------------------------------------ [BUG/PRB.] VFP 9.0 FIX - ASTACKINFO() Function January 2024 ------------------------------------------------------------ CCB 1. BUG: In vfp9 (and vfp7, vfp8), the ASTACKINFO() function can not return the call stack information for the ON statements, for example, ON ERROR, ON KEY LABEL, ON SELECTION, etc. 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 The bug was reported by Tomas Tamm. 2. CAUSE: There are some BUGs in the following code. 3. RESOLUTION: We can write some code to fix the BUG. Label65a785 :: ; ; ------------------------------------------------- ; VFP 9.0 FIX - ASTACKINFO() Function ; November 2017 ; ------------------------------------------------- ; CCB ; ; Returns the call stack information for the ON statements (ON ERROR, ON KEY LABEL, ON SELECTION, etc.). ; ; 2017/11/29, by ccb ; cmp dword ptr vfpa_sys9111_data,00h je Label65a786 cmp dword ptr vfpa_sys9111_data,02h je Label65a78f test byte ptr [ ebx + 28 ] , 08h jne Label65aaf3 test byte ptr [ ebx + 28 ] , 02h je Label65a78f mov eax , dword ptr [ebx] mov eax , dword ptr [eax] cmp byte ptr [ eax + 18 ] , 015h je Label65aaf3 jmp Label65a78f Label65a786 :: test byte ptr [ ebx + 28 ] , 0Ah ;0x0065a785 : f6431c0a jne Label65aaf3 ;0x0065a789 : 0f8564030000 Label65a78f :: cmp ebx , dword ptr [ Data9370e8 ] ;0x0065a78f : 3b1de8709300 jne Label65a79c ;0x0065a795 : 7505 mov ebx , offset Data93e6f0 ;0x0065a797 : bbf0e69300 Label65a79c :: inc dword ptr [ ebp + 0FFFFFD24h ] ;0x0065a79c : ff8524fdffff mov eax , dword ptr [ ebp + 0FFFFFD24h ] ;0x0065a7a2 : 8b8524fdffff inc dword ptr [ ebp + 0FFFFFD08h ] ;0x0065a7a8 : ff8508fdffff push esi ;0x0065a7ae : 56 lea edx , dword ptr [ ebp + 0FFFFFCFCh ] ;0x0065a7af : 8d95fcfcffff lea ecx , dword ptr [ ebp + 0FFFFFF48h ] ;0x0065a7b5 : 8d8d48ffffff mov byte ptr [ ebp + 0FFFFFF48h ] , 049h ;0x0065a7bb : c68548ffffff49 mov dword ptr [ ebp + 0FFFFFF4Ch ] , 0Ah ;0x0065a7c2 : c7854cffffff0a000000 mov dword ptr [ ebp + 0FFFFFF54h ] , eax ;0x0065a7cc : 898554ffffff call Fun52bf26 ;0x0065a7d2 : e84f17edff mov eax , dword ptr [ebx] ;0x0065a7d7 : 8b03 lea edx , dword ptr [ ebp + 0FFFFFD34h ] ;0x0065a7d9 : 8d9534fdffff call Fun527b20 ;0x0065a7df : e83cd3ecff lea eax , dword ptr [ ebp + 0FFFFFD34h ] ;0x0065a7e4 : 8d8534fdffff mov dword ptr [ ebp + 0FFFFFF4Ch ] , esi ;0x0065a7ea : 89b54cffffff mov byte ptr [ ebp + 0FFFFFF48h ] , 048h ;0x0065a7f0 : c68548ffffff48 lea esi , dword ptr [ eax + 1 ] ;0x0065a7f7 : 8d7001 Label65a7fa :: mov cl , byte ptr [eax] ;0x0065a7fa : 8a08 inc eax ;0x0065a7fc : 40 test cl , cl ;0x0065a7fd : 84c9 jne Label65a7fa ;0x0065a7ff : 75f9 sub eax , esi ;0x0065a801 : 2bc6 pushd 07h ;0x0065a803 : 6a07 mov dword ptr [ ebp + 0FFFFFF50h ] , eax ;0x0065a805 : 898550ffffff call Fun42bf2a ;0x0065a80b : e81a17ddff mov ecx , dword ptr [ ebp + 0FFFFFF50h ] ;0x0065a810 : 8b8d50ffffff mov dword ptr [ ebp + 0FFFFFF68h ] , eax ;0x0065a816 : 898568ffffff mov edi , dword ptr [eax] ;0x0065a81c : 8b38 mov eax , ecx ;0x0065a81e : 8bc1 shr ecx , 02h ;0x0065a820 : c1e902 lea esi , dword ptr [ ebp + 0FFFFFD34h ] ;0x0065a823 : 8db534fdffff rep movsd ;0x0065a829 : f3a5 mov ecx , eax ;0x0065a82b : 8bc8 and ecx , 03h ;0x0065a82d : 83e103 rep movsb ;0x0065a830 : f3a4 inc dword ptr [ ebp + 0FFFFFD08h ] ;0x0065a832 : ff8508fdffff xor edi , edi ;0x0065a838 : 33ff push edi ;0x0065a83a : 57 lea edx , dword ptr [ ebp + 0FFFFFCFCh ] ;0x0065a83b : 8d95fcfcffff lea ecx , dword ptr [ ebp + 0FFFFFF48h ] ;0x0065a841 : 8d8d48ffffff call Fun52bf26 ;0x0065a847 : e8da16edff mov ecx , dword ptr [ ebp + 0FFFFFF68h ] ;0x0065a84c : 8b8d68ffffff call Fun42c1e2 ;0x0065a852 : e88b19ddff mov ecx , dword ptr [ ebp + 0FFFFFD20h ] ;0x0065a857 : 8b8d20fdffff mov eax , dword ptr [ ecx + 40 ] ;0x0065a85d : 8b4128 cmp eax , edi ;0x0065a860 : 3bc7 je Label65a878 ;0x0065a862 : 7414 mov esi , dword ptr [ ecx + 44 ] ;0x0065a864 : 8b712c xor ecx , ecx ;0x0065a867 : 33c9 cmp eax , esi ;0x0065a869 : 3bc6 setne cl ;0x0065a86b : 0f95c1 push ecx ;0x0065a86e : 51 push ebx ;0x0065a86f : 53 push esi ;0x0065a870 : 56 call Fun4e3f39 ;0x0065a871 : e8c396e8ff jmp Label65a883 ;0x0065a876 : eb0b 4. APPLIES TO: VFP 7.0.0.9262 VFP 7.0.0.9465 (SP1) VFP 8.0.0.2521 VFP 8.0.0.3117 (SP1) VFP 9.0.0.2412 VFP 9.0.0.3504 (SP1) 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_vfp9fix229.asp 2, foxite.com: https://www.foxite.com/archives/astackinfo-wrong-intermittently-0000398512.htm 6. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |