------------------------------------------------------------------------- [BUG/PRB.] VFP 9.0 FIX - EDITBOX CONTROL ENTER AN INFINITE LOOP January 2024 ------------------------------------------------------------------------- CCB 1. BUG: In the EditBox Control (and the VFP text editor, for example, the MODIFY COMMAND window), if there are some non-printable characters (for example, CHR(0)), sometimes VFP will enter an infinite loop. The bug occurs in vfp9, it does not occur in vfp6, vfp7 and vfp8. The bug only occurs in DBCS (Double-Byte Character Sets) environments. 2. CAUSE: There are some BUGs in the following code. 3. RESOLUTION: We can write some code to fix the BUG. Label613809 :: mov eax , dword ptr [ ebp + 12 ] ;0x00613809 : 8b450c xor edx , edx ;0x0061380c : 33d2 cmp dword ptr [ ebp - 8 ] , edx ;0x0061380e : 3955f8 mov edi , eax ;0x00613811 : 8bf8 mov dword ptr [ ebp - 24 ] , eax ;0x00613813 : 8945e8 jle Label61387e ;0x00613816 : 7e66 Label613818 :: mov cl , byte ptr [eax] ;0x00613818 : 8a08 movzx esi , cl ;0x0061381a : 0fb6f1 test byte ptr [ 2 * esi + offset Data937360 ] , 040h ;0x0061381d : f604756073930040 mov dword ptr [ ebp - 24 ] , eax ;0x00613825 : 8945e8 je Label613834 ;0x00613828 : 740a cmp cl , 0Dh ;0x0061382a : 80f90d je Label613834 ;0x0061382d : 7405 cmp cl , 0Ah ;0x0061382f : 80f90a jne Label61383d ;0x00613832 : 7509 Label613834 :: test byte ptr [ esi + offset Data937120 ] , 01h ;0x00613834 : f6862071930001 je Label61386f ;0x0061383b : 7432 Label61383d :: cmp edx , dword ptr [ ebp - 8 ] ;0x0061383d : 3b55f8 mov edi , eax ;0x00613840 : 8bf8 jnl Label61386f ;0x00613842 : 7d2b Label613844 :: mov cl , byte ptr [eax] ;0x00613844 : 8a08 movzx edx , cl ;0x00613846 : 0fb6d1 test byte ptr [ 2 * edx + offset Data937360 ] , 040h ;0x00613849 : f604556073930040 je Label61386f ;0x00613851 : 741c cmp cl , 0Dh ;0x00613853 : 80f90d je Label61386f ;0x00613856 : 7417 cmp cl , 0Ah ;0x00613858 : 80f90a je Label61386f ;0x0061385b : 7412 mov dword ptr [ ebp - 24 ] , eax ;0x0061385d : 8945e8 call Fun418cec ;0x00613860 : e88754e0ff mov ecx , eax ;0x00613865 : 8bc8 sub ecx , dword ptr [ ebp + 12 ] ;0x00613867 : 2b4d0c cmp ecx , dword ptr [ ebp - 8 ] ;0x0061386a : 3b4df8 jl Label613844 ;0x0061386d : 7cd5 Label61386f :: ; ; -------------------------------------------------------------- ; VFP 9.0 FIX - EDITBOX CONTROL ENTER AN INFINITE LOOP ; March 2017 ; -------------------------------------------------------------- ; CCB ; ; In the EditBox Control (and the VFP text editor, for example, the MODIFY COMMAND window), ; if there are some non-printable characters (for example, CHR(0)), sometimes VFP will enter an infinite loop. ; ; 2017/3/22, by ccb ; cmp byte ptr [eax],00h jne Label613873 inc eax jmp Label613874 Label613873 :: call Fun418cec ;0x0061386f : e87854e0ff Label613874 :: mov edx , eax ;0x00613874 : 8bd0 sub edx , dword ptr [ ebp + 12 ] ;0x00613876 : 2b550c cmp edx , dword ptr [ ebp - 8 ] ;0x00613879 : 3b55f8 jl Label613818 ;0x0061387c : 7c9a Label61387e :: sub edi , dword ptr [ ebp + 12 ] ;0x0061387e : 2b7d0c mov esi , edi ;0x00613881 : 8bf7 cmp esi , dword ptr [ ebp - 8 ] ;0x00613883 : 3b75f8 je Label61388c ;0x00613886 : 7404 test esi , esi ;0x00613888 : 85f6 jne Label6138ac ;0x0061388a : 7520 Label61388c :: mov edi , dword ptr [ ebp + 12 ] ;0x0061388c : 8b7d0c mov esi , dword ptr [ ebp - 24 ] ;0x0061388f : 8b75e8 mov eax , edi ;0x00613892 : 8bc7 sub esi , edi ;0x00613894 : 2bf7 call Fun418cec ;0x00613896 : e85154e0ff sub eax , edi ;0x0061389b : 2bc7 cmp eax , esi ;0x0061389d : 3bc6 jle Label6138ac ;0x0061389f : 7e0b mov eax , edi ;0x006138a1 : 8bc7 call Fun418cec ;0x006138a3 : e84454e0ff mov esi , eax ;0x006138a8 : 8bf0 sub esi , edi ;0x006138aa : 2bf7 Label6138ac :: mov edi , dword ptr [ ebp - 8 ] ;0x006138ac : 8b7df8 jmp Label4e69f6 ;0x006138af : e94231edff 4. APPLIES TO: 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 2, csdn.net: http://bbs.csdn.net/topics/100089631 3, tech-archive.net: http://www.tech-archive.net/Archive/Fox/microsoft.public.fox.programmer.exchange/2005-12/msg00493.html 4, microsoft.com: https://blogs.msdn.microsoft.com/calvin_hsia/2006/11/15/heres-an-infinite-loop-that-will-hang-your-machine/ 5, sunyear.com.tw: http://vfp.sunyear.com.tw/viewtopic.php?t=4835 6. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |