------------------------------------------------------------ [ENHANCED] VFP 9.0 FIX - THE COMMAND-LINE OPTIONS January 2024 ------------------------------------------------------------ CCB 1. BUG: In vfp9 (and vfp6, vfp7, vfp8), the command-line options can only use <= 255 bytes, now it can use <= 8191 bytes. Usually, we can pass a maximum of 26 parameters from the command-line options. 2. CAUSE: There are some BUGs in the following code. 3. RESOLUTION: We can write some code to fix the BUG. Fun403e79 :: ; proc near push ebp ;0x00403e79 : 55 mov ebp , esp ;0x00403e7a : 8bec sub esp , 05Ch ;0x00403e7c : 83ec5c mov eax , dword ptr [ ebp + 8 ] ;0x00403e7f : 8b4508 cmp byte ptr [eax] , 00h ;0x00403e82 : 803800 push ebx ;0x00403e85 : 53 push esi ;0x00403e86 : 56 mov esi , dword ptr [ ebp + 12 ] ;0x00403e87 : 8b750c push edi ;0x00403e8a : 57 je Label403f1c ;0x00403e8b : 0f848b000000 lea ecx , dword ptr [ eax + 1 ] ;0x00403e91 : 8d4801 Label403e94 :: mov dl , byte ptr [eax] ;0x00403e94 : 8a10 inc eax ;0x00403e96 : 40 test dl , dl ;0x00403e97 : 84d2 jne Label403e94 ;0x00403e99 : 75f9 sub eax , ecx ;0x00403e9b : 2bc1 ; ; ------------------------------------------------- ; VFP 9.0 FIX - THE COMMAND-LINE OPTIONS ; July 2019 ; ------------------------------------------------- ; CCB ; ; In vfp9, the command-line options can only use <= 255 bytes, now it can use <= 8191 bytes. ; ; 2019/7/10, by ccb ; ; mov ebx , 0100h ;0x00403e9d : bb00010000 mov ebx , 02000h ;0x00403e9d : bb00010000 lea ecx , dword ptr [ esi + 0842h ] ;0x00403ea2 : 8d8e42080000 mov edx , ebx ;0x00403ea8 : 8bd3 mov dword ptr [ ebp - 8 ] , eax ;0x00403eaa : 8945f8 ; ; ------------------------------------------------- ; VFP 9.0 FIX - THE COMMAND-LINE OPTIONS ; July 2019 ; ------------------------------------------------- ; CCB ; ; In vfp9, the command-line options can only use <= 255 bytes, now it can use <= 8191 bytes. ; ; 2019/7/10, by ccb ; ; lea edi , dword ptr [ esi + 0942h ] ;0x00403ead : 8dbe42090000 lea edi , dword ptr [ esi - 2000h ] ;0x00403ead : 8dbe42090000 call Fun41b81c ;0x00403eb3 : e864790100 mov edx , ebx ;0x00403eb8 : 8bd3 mov ecx , edi ;0x00403eba : 8bcf mov dword ptr [ ebp - 4 ] , eax ;0x00403ebc : 8945fc call Fun41b81c ;0x00403ebf : e858790100 mov ecx , dword ptr [ ebp - 4 ] ;0x00403ec4 : 8b4dfc add ecx , dword ptr [ ebp - 8 ] ;0x00403ec7 : 034df8 add eax , ecx ;0x00403eca : 03c1 cmp eax , ebx ;0x00403ecc : 3bc3 jnl Label403f16 ;0x00403ece : 7d46 mov eax , dword ptr [ esi + 0A50h ] ;0x00403ed0 : 8b86500a0000 xor edi , edi ;0x00403ed6 : 33ff cmp eax , edi ;0x00403ed8 : 3bc7 je Label403f23 ;0x00403eda : 7447 cmp dword ptr [ Data93a7fc ] , 03h ;0x00403edc : 833dfca7930003 je Label5773eb ;0x00403ee3 : 0f8402351700 cmp eax , 01h ;0x00403ee9 : 83f801 mov eax , offset Data918008 ;0x00403eec : b808809100 je Label403ef8 ;0x00403ef1 : 7405 mov eax , offset Data918004 ;0x00403ef3 : b804809100 Label403ef8 :: push eax ;0x00403ef8 : 50 ; ; ------------------------------------------------- ; VFP 9.0 FIX - THE COMMAND-LINE OPTIONS ; July 2019 ; ------------------------------------------------- ; CCB ; ; In vfp9, the command-line options can only use <= 255 bytes, now it can use <= 8191 bytes. ; ; 2019/7/10, by ccb ; ; lea edi , dword ptr [ esi + 0942h ] ;0x00403ef9 : 8dbe42090000 lea edi , dword ptr [ esi - 2000h ] ;0x00403ef9 : 8dbe42090000 call Fun42e055 ;0x00403eff : e851a10200 push dword ptr [ ebp + 8 ] ;0x00403f04 : ff7508 call Fun42e055 ;0x00403f07 : e849a10200 pushd offset Data917f4c ;0x00403f0c : 684c7f9100 Label403f11 :: call Fun42e055 ;0x00403f11 : e83fa10200 Label403f16 :: inc dword ptr [ esi + 0A50h ] ;0x00403f16 : ff86500a0000 Label403f1c :: pop edi ;0x00403f1c : 5f pop esi ;0x00403f1d : 5e pop ebx ;0x00403f1e : 5b leave ;0x00403f1f : c9 ret 08h ;0x00403f20 : c20800 4. APPLIES TO: VFP 6.0.8167.0 VFP 6.0.8961.0 (SP5) 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 2, microsoft.com: https://social.msdn.microsoft.com/Forums/en-US/feeea559-4183-4fed-9081-3879e0d087de/command-line-parameters-length-limitation https://devblogs.microsoft.com/oldnewthing/?p=41553 3, tek-tips.com: https://www.tek-tips.com/viewthread.cfm?qid=1062921 https://www.tek-tips.com/viewthread.cfm?qid=1752644 4, berezniker.com: https://www.berezniker.com/content/pages/visual-foxpro/how-pass-parameters-vfp-exe 6. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |