------------------------------------------------------------ [ENHANCED] VFP 9.0 FIX - REPLACE COMMAND FIELDS COUNT January 2024 ------------------------------------------------------------ CCB 1. BUG: In vfp9 (and vfp6, vfp7, vfp8), the REPLACE command can only use <= 127 fields, now it can use <= 255 fields. There is no the bug for the UPDATE command, it can use <= 254 fields. The bug was reported by Mike Yearwood. 2. CAUSE: There are some BUGs in the following code. 3. RESOLUTION: We can write some code to fix the BUG. Label52e420 :: lea edx , dword ptr [ ebp - 28 ] ;0x0052e420 : 8d55e4 lea eax , dword ptr [ ebp + 0FFFFFF38h ] ;0x0052e423 : 8d8538ffffff call Fun42c27f ;0x0052e429 : e851deefff push edi ;0x0052e42e : 57 push eax ;0x0052e42f : 50 call Fun42c2be ;0x0052e430 : e889deefff add esp , 08h ;0x0052e435 : 83c408 cmp eax , edi ;0x0052e438 : 3bc7 mov dword ptr [ ebp - 32 ] , eax ;0x0052e43a : 8945e0 jne Label52e3aa ;0x0052e43d : 0f8567ffffff mov eax , dword ptr [ Data9370f8 ] ;0x0052e443 : a1f8709300 mov ecx , dword ptr [eax] ;0x0052e448 : 8b08 mov edx , dword ptr [ ecx + 0A8h ] ;0x0052e44a : 8b91a8000000 push edx ;0x0052e450 : 52 xor edx , edx ;0x0052e451 : 33d2 xor ecx , ecx ;0x0052e453 : 33c9 call Fun52d14e ;0x0052e455 : e8f4ecffff mov eax , dword ptr [ Data9393ac ] ;0x0052e45a : a1ac939300 cmp byte ptr [eax] , 015h ;0x0052e45f : 803815 je Label5d8b1c ;0x0052e462 : 0f84b4a60a00 xor eax , eax ;0x0052e468 : 33c0 call Fun42c118 ;0x0052e46a : e8a9dcefff mov edx , dword ptr [ Data9370c4 ] ;0x0052e46f : 8b15c4709300 mov eax , esp ;0x0052e475 : 8bc4 sub eax , edx ;0x0052e477 : 2bc2 cmp eax , 2 * 0600h ;0x0052e479 : 3d00060000 jle Label5d8b26 ;0x0052e47e : 0f8ea2a60a00 mov eax , 2 * 0600h ;0x0052e484 : b800060000 call Fun42c118 ;0x0052e489 : e88adcefff mov dword ptr [ ebp - 16 ] , esp ;0x0052e48e : 8965f0 Label52e491 :: mov ebx , dword ptr [ ebp - 8 ] ;0x0052e491 : 8b5df8 Label52e494 :: ; ; ------------------------------------------------- ; VFP 9.0 FIX - REPLACE COMMAND FIELDS COUNT ; August 2014 ; ------------------------------------------------- ; CCB ; ; In vfp9, the REPLACE command can only use <= 127 fields, now it can use <= 255 fields. ; ; 2014/8/22, by ccb ; cmp ebx , 2 * 080h ;0x0052e494 : 81fb80000000 jnl Label5d8b2e ;0x0052e49a : 0f8d8ea60a00 pushd 0FFFFFFFFh ;0x0052e4a0 : 6aff mov edx , 01100h ;0x0052e4a2 : ba00110000 lea ecx , dword ptr [ ebp - 80 ] ;0x0052e4a7 : 8d4db0 call Fun421184 ;0x0052e4aa : e8d52cefff mov edx , dword ptr [ ebp - 16 ] ;0x0052e4af : 8b55f0 mov ax , word ptr [ ebp - 72 ] ;0x0052e4b2 : 668b45b8 lea ecx , dword ptr [ ebx + 2 * ebx ] ;0x0052e4b6 : 8d0c5b lea edi , dword ptr [ edx + 4 * ecx ] ;0x0052e4b9 : 8d3c8a mov ecx , dword ptr [ Data9370f8 ] ;0x0052e4bc : 8b0df8709300 mov word ptr [edi] , ax ;0x0052e4c2 : 668907 mov edx , dword ptr [ecx] ;0x0052e4c5 : 8b11 mov eax , dword ptr [ edx + 8 ] ;0x0052e4c7 : 8b4208 test eax , eax ;0x0052e4ca : 85c0 je Label5d8b38 ;0x0052e4cc : 0f8466a60a00 mov edx , dword ptr [ ebp - 76 ] ;0x0052e4d2 : 8b55b4 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, codeplex.com: http://vfpx.codeplex.com/workitem/35381 3, foxite.com: http://www.foxite.com/archives/undocummented-limitation-found-0000003165.htm 6. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |