------------------------------------------------------------------------------------------------------------ [BUG/PRB.] VFP 9.0 FIX - THE COMPILE DATABASE COMMAND COMPILES DATABASE FILES INTO NEW FILE FORMAT January 2024 ------------------------------------------------------------------------------------------------------------ CCB 1. BUG: If we enable the COMPILE DATABASE command to compile database files into new file format, and there are some stored procedures in the database files, the compiled database files can only be opened in Visual FoxPro Advanced. When we open the compiled database files in Visual FoxPro 9.0 or Visual FoxPro earlier versions, it will cause the error "Object file 'name' was compiled in a different version of FoxPro (Error 1195)". We can run the COMPILE DATABASE command in Visual FoxPro 9.0 or Visual FoxPro earlier versions to solve the problem. If we disable the COMPILE DATABASE command to compile database files into new file format, the compiled database files can be opened in Visual FoxPro all versions (Visual FoxPro Advanced and Visual FoxPro earlier versions). It is the startup default for Visual FoxPro Advanced. 2. CAUSE: There are some BUGs in the following code. 3. RESOLUTION: We can write some code to fix the BUG. Fun54814b :: ; proc near push ebp ;0x0054814b : 55 mov ebp , esp ;0x0054814c : 8bec sub esp , 0114h ;0x0054814e : 81ec14010000 mov eax , dword ptr [ Data937090 ] ;0x00548154 : a190709300 mov dword ptr [ ebp - 4 ] , eax ;0x00548159 : 8945fc mov eax , dword ptr [ Data9388f0 ] ;0x0054815c : a1f0889300 mov ecx , dword ptr [ eax + 0268h ] ;0x00548161 : 8b8868020000 test byte ptr [ ecx + 12 ] , 01h ;0x00548167 : f6410c01 push esi ;0x0054816b : 56 jne Label548443 ;0x0054816c : 0f85d1020000 lea ecx , dword ptr [ eax + 0294h ] ;0x00548172 : 8d8894020000 xor esi , esi ;0x00548178 : 33f6 cmp dword ptr [ecx] , esi ;0x0054817a : 3931 push edi ;0x0054817c : 57 mov edi , dword ptr [ ebp + 12 ] ;0x0054817d : 8b7d0c jne Label462929 ;0x00548180 : 0f85a3a7f1ff Label548186 :: mov ax , word ptr [ eax + 02E4h ] ;0x00548186 : 668b80e4020000 mov word ptr [ edi + 2 ] , ax ;0x0054818d : 66894702 call Fun547db1 ;0x00548191 : e81bfcffff mov dword ptr [ edi + 12 ] , eax ;0x00548196 : 89470c mov eax , dword ptr [ Data9388f0 ] ;0x00548199 : a1f0889300 mov eax , dword ptr [ eax + 0268h ] ;0x0054819e : 8b8068020000 test byte ptr [ eax + 8 ] , 04h ;0x005481a4 : f6400804 jne Label5481b4 ;0x005481a8 : 750a call Fun548092 ;0x005481aa : e8e3feffff call Fun547df8 ;0x005481af : e844fcffff Label5481b4 :: pushd 02h ;0x005481b4 : 6a02 mov edx , offset Data92010c ;0x005481b6 : ba0c019200 mov ecx , ebx ;0x005481bb : 8bcb call Fun42c19b ;0x005481bd : e8d93feeff mov al , byte ptr [ ebp + 16 ] ;0x005481c2 : 8a4510 mov ecx , dword ptr [ Data9388f0 ] ;0x005481c5 : 8b0df0889300 not al ;0x005481cb : f6d0 mov byte ptr [ edi + 36 ] , al ;0x005481cd : 884724 lea eax , dword ptr [ ebp + 16 ] ;0x005481d0 : 8d4510 mov word ptr [ ebx + 3 ] , 0220h ;0x005481d3 : 66c743032002 ; ; ------------------------------------------------------------------------------------------------- ; VFP 9.0 FIX - THE COMPILE DATABASE COMMAND COMPILES DATABASE FILES INTO NEW FILE FORMAT ; May 2020 ; ------------------------------------------------------------------------------------------------- ; CCB ; ; The COMPILE DATABASE command compiles database files into new file format. ; ; 2020/5/23, by ccb ; push ecx push eax push dword ptr [ Data9388f0 ] call vfpa_isdbcfile test eax,eax pop eax pop ecx je Label5481d8 cmp dword ptr vfpa_sys9032_data,00h jne Label5481d8 jmp Label5481d9 Label5481d8 :: mov word ptr [ ebx + 3 ] , 0222h Label5481d9 :: mov byte ptr [ ebx + 2 ] , 0FFh ;0x005481d9 : c64302ff push eax ;0x005481dd : 50 add ecx , 0224h ;0x005481de : 81c124020000 mov dword ptr [ edi + 4 ] , 025h ;0x005481e4 : c7470425000000 mov dword ptr [ ebp + 16 ] , esi ;0x005481eb : 897510 call Fun547e73 ;0x005481ee : e880fcffff mov eax , dword ptr [ ebp + 16 ] ;0x005481f3 : 8b4510 mov dword ptr [ edi + 28 ] , eax ;0x005481f6 : 89471c mov eax , dword ptr [ Data9388f0 ] ;0x005481f9 : a1f0889300 mov word ptr [ ebx + 7 ] , si ;0x005481fe : 66897307 mov esi , dword ptr [ ebp + 8 ] ;0x00548202 : 8b7508 add eax , 0244h ;0x00548205 : 0544020000 mov byte ptr [esi] , 00h ;0x0054820a : c60600 mov dword ptr [ esi + 1 ] , 029h ;0x0054820d : c7460129000000 call Fun546c68 ;0x00548214 : e84feaffff and dword ptr [ esi + 9 ] , 00h ;0x00548219 : 83660900 mov dword ptr [ esi + 5 ] , eax ;0x0054821d : 894605 mov eax , dword ptr [ Data9388f0 ] ;0x00548220 : a1f0889300 add eax , 0244h ;0x00548225 : 0544020000 call Fun546c68 ;0x0054822a : e839eaffff mov ecx , dword ptr [ Data9388f0 ] ;0x0054822f : 8b0df0889300 mov dword ptr [ ebx + 13 ] , eax ;0x00548235 : 89430d cmp dword ptr [ ecx + 0218h ] , 00h ;0x00548238 : 83b91802000000 jne Label54830a ;0x0054823f : 0f85c5000000 add ecx , 0105h ;0x00548245 : 81c105010000 push ecx ;0x0054824b : 51 lea eax , dword ptr [ ebp + 0FFFFFEECh ] ;0x0054824c : 8d85ecfeffff push eax ;0x00548252 : 50 call Fun434bcf ;0x00548253 : e877c9eeff pushd 07h ;0x00548258 : 6a07 pop ecx ;0x0054825a : 59 lea edx , dword ptr [ ebp + 0FFFFFEECh ] ;0x0054825b : 8d95ecfeffff call Fun433395 ;0x00548261 : e82fb1eeff mov esi , dword ptr [eax] ;0x00548266 : 8b30 mov dword ptr [ ebp + 0FFFFFEF0h ] , eax ;0x00548268 : 8985f0feffff mov eax , esi ;0x0054826e : 8bc6 lea edi , dword ptr [ eax + 1 ] ;0x00548270 : 8d7801 Label548273 :: mov cl , byte ptr [eax] ;0x00548273 : 8a08 inc eax ;0x00548275 : 40 test cl , cl ;0x00548276 : 84c9 jne Label548273 ;0x00548278 : 75f9 sub eax , edi ;0x0054827a : 2bc7 inc eax ;0x0054827c : 40 movzx edi , ax ;0x0054827d : 0fb7f8 push edi ;0x00548280 : 57 push esi ;0x00548281 : 56 mov esi , dword ptr [ Data9388f0 ] ;0x00548282 : 8b35f0889300 add esi , 0244h ;0x00548288 : 81c644020000 mov dword ptr [ ebp + 16 ] , eax ;0x0054828e : 894510 call Fun546c80 ;0x00548291 : e8eae9ffff mov ecx , dword ptr [ ebp + 0FFFFFEF0h ] ;0x00548296 : 8b8df0feffff call Fun42c1e2 ;0x0054829c : e8413feeff mov eax , dword ptr [ ebp + 8 ] ;0x005482a1 : 8b4508 mov ecx , dword ptr [ Data9388f0 ] ;0x005482a4 : 8b0df0889300 mov dword ptr [ eax + 13 ] , edi ;0x005482aa : 89780d xor edi , edi ;0x005482ad : 33ff inc edi ;0x005482af : 47 add ecx , 0105h ;0x005482b0 : 81c105010000 mov eax , edi ;0x005482b6 : 8bc7 lea edx , dword ptr [ ebp + 0FFFFFEF4h ] ;0x005482b8 : 8d95f4feffff call Fun43f2b9 ;0x005482be : e8f66fefff xor esi , esi ;0x005482c3 : 33f6 Label5482c5 :: cmp byte ptr [ ebp + esi + 0FFFFFEF4h ] , 00h ;0x005482c5 : 80bc35f4feffff00 je Label5482d8 ;0x005482cd : 7409 inc esi ;0x005482cf : 46 cmp esi , 0106h ;0x005482d0 : 81fe06010000 jl Label5482c5 ;0x005482d6 : 7ced Label5482d8 :: cmp esi , 0106h ;0x005482d8 : 81fe06010000 jnl Label566a77 ;0x005482de : 0f8d93e70100 Label5482e4 :: inc esi ;0x005482e4 : 46 push esi ;0x005482e5 : 56 mov esi , dword ptr [ Data9388f0 ] ;0x005482e6 : 8b35f0889300 lea eax , dword ptr [ ebp + 0FFFFFEF4h ] ;0x005482ec : 8d85f4feffff push eax ;0x005482f2 : 50 add esi , 0244h ;0x005482f3 : 81c644020000 call Fun546c80 ;0x005482f9 : e882e9ffff mov ecx , dword ptr [ Data9388f0 ] ;0x005482fe : 8b0df0889300 mov edi , dword ptr [ ebp + 12 ] ;0x00548304 : 8b7d0c mov esi , dword ptr [ ebp + 8 ] ;0x00548307 : 8b7508 Label54830a :: mov eax , dword ptr [ ecx + 0268h ] ;0x0054830a : 8b8168020000 test byte ptr [ eax + 8 ] , 04h ;0x00548310 : f6400804 jne Label5483b7 ;0x00548314 : 0f859d000000 cmp dword ptr [ ecx + 0218h ] , 00h ;0x0054831a : 83b91802000000 jne Label548394 ;0x00548321 : 7571 xor esi , esi ;0x00548323 : 33f6 Label548325 :: cmp byte ptr [ ebp + esi + 0FFFFFEF4h ] , 00h ;0x00548325 : 80bc35f4feffff00 je Label548338 ;0x0054832d : 7409 inc esi ;0x0054832f : 46 cmp esi , 0106h ;0x00548330 : 81fe06010000 jl Label548325 ;0x00548336 : 7ced Label548338 :: cmp esi , 0106h ;0x00548338 : 81fe06010000 jnl Label566a83 ;0x0054833e : 0f8d3fe70100 Label548344 :: movzx eax ,word ptr [ ebp + 16 ] ;0x00548344 : 0fb74510 lea eax , dword ptr [ esi + eax + 1 ] ;0x00548348 : 8d440601 xor edx , edx ;0x0054834c : 33d2 mov dword ptr [ edi + 32 ] , eax ;0x0054834e : 894720 call Fun43d2bf ;0x00548351 : e8694fefff mov esi , dword ptr [eax] ;0x00548356 : 8b30 mov dword ptr [ ebp + 0FFFFFEF0h ] , eax ;0x00548358 : 8985f0feffff mov eax , esi ;0x0054835e : 8bc6 lea ecx , dword ptr [ eax + 1 ] ;0x00548360 : 8d4801 Label548363 :: mov dl , byte ptr [eax] ;0x00548363 : 8a10 inc eax ;0x00548365 : 40 test dl , dl ;0x00548366 : 84d2 jne Label548363 ;0x00548368 : 75f9 sub eax , ecx ;0x0054836a : 2bc1 inc eax ;0x0054836c : 40 push eax ;0x0054836d : 50 push esi ;0x0054836e : 56 mov esi , dword ptr [ Data9388f0 ] ;0x0054836f : 8b35f0889300 add esi , 0244h ;0x00548375 : 81c644020000 call Fun546c80 ;0x0054837b : e800e9ffff mov ecx , dword ptr [ ebp + 0FFFFFEF0h ] ;0x00548380 : 8b8df0feffff call Fun42c1e2 ;0x00548386 : e8573eeeff mov ecx , dword ptr [ Data9388f0 ] ;0x0054838b : 8b0df0889300 mov esi , dword ptr [ ebp + 8 ] ;0x00548391 : 8b7508 Label548394 :: mov eax , dword ptr [ ecx + 026Ch ] ;0x00548394 : 8b816c020000 mov dword ptr [ edi + 24 ] , eax ;0x0054839a : 894718 mov edx , dword ptr [ ecx + 02B8h ] ;0x0054839d : 8b91b8020000 mov eax , dword ptr [ ecx + 02C8h ] ;0x005483a3 : 8b81c8020000 add eax , edx ;0x005483a9 : 03c2 mov edx , dword ptr [ edi + 24 ] ;0x005483ab : 8b5718 mov dword ptr [ edi + 20 ] , eax ;0x005483ae : 894714 lea eax , dword ptr [ edx + 2 * eax ] ;0x005483b1 : 8d0442 mov dword ptr [ edi + 16 ] , eax ;0x005483b4 : 894710 Label5483b7 :: lea eax , dword ptr [ ecx + 0244h ] ;0x005483b7 : 8d8144020000 call Fun546c68 ;0x005483bd : e8a6e8ffff sub eax , dword ptr [ ebx + 13 ] ;0x005483c2 : 2b430d mov word ptr [ ebx + 5 ] , 01h ;0x005483c5 : 66c743050100 mov dword ptr [ ebx + 17 ] , eax ;0x005483cb : 894311 mov eax , dword ptr [ Data9388f0 ] ;0x005483ce : a1f0889300 add eax , 0244h ;0x005483d3 : 0544020000 call Fun546c68 ;0x005483d8 : e88be8ffff pushd 019h ;0x005483dd : 6a19 push esi ;0x005483df : 56 mov esi , dword ptr [ Data9388f0 ] ;0x005483e0 : 8b35f0889300 add esi , 0244h ;0x005483e6 : 81c644020000 mov dword ptr [ ebx + 9 ] , eax ;0x005483ec : 894309 call Fun546c80 ;0x005483ef : e88ce8ffff mov esi , dword ptr [ Data9388f0 ] ;0x005483f4 : 8b35f0889300 mov eax , dword ptr [ ebp + 8 ] ;0x005483fa : 8b4508 mov ecx , dword ptr [ eax + 1 ] ;0x005483fd : 8b4801 add esi , 0244h ;0x00548400 : 81c644020000 mov eax , esi ;0x00548406 : 8bc6 call Fun5476b6 ;0x00548408 : e8a9f2ffff pushd 025h ;0x0054840d : 6a25 push edi ;0x0054840f : 57 call Fun546c80 ;0x00548410 : e86be8ffff mov esi , dword ptr [ Data9388f0 ] ;0x00548415 : 8b35f0889300 add esi , 0244h ;0x0054841b : 81c644020000 xor ecx , ecx ;0x00548421 : 33c9 mov eax , esi ;0x00548423 : 8bc6 call Fun5476b6 ;0x00548425 : e88cf2ffff mov eax , ebx ;0x0054842a : 8bc3 call Fun548481 ;0x0054842c : e850000000 pushd 029h ;0x00548431 : 6a29 push ebx ;0x00548433 : 53 mov word ptr [ ebx + 39 ] , ax ;0x00548434 : 66894327 call Fun546c80 ;0x00548438 : e843e8ffff mov eax , dword ptr [ Data9388f0 ] ;0x0054843d : a1f0889300 pop edi ;0x00548442 : 5f Label548443 :: lea ecx , dword ptr [ eax + 0268h ] ;0x00548443 : 8d8868020000 mov edx , dword ptr [ecx] ;0x00548449 : 8b11 mov dword ptr [ edx + 56 ] , 01h ;0x0054844b : c7423801000000 mov edx , dword ptr [ eax + 0294h ] ;0x00548452 : 8b9094020000 mov esi , dword ptr [ecx] ;0x00548458 : 8b31 inc edx ;0x0054845a : 42 mov dword ptr [ esi + 64 ] , edx ;0x0054845b : 895640 mov edx , dword ptr [ecx] ;0x0054845e : 8b11 mov esi , dword ptr [ eax + 02E4h ] ;0x00548460 : 8bb0e4020000 mov dword ptr [ edx + 68 ] , esi ;0x00548466 : 897244 mov ecx , dword ptr [ecx] ;0x00548469 : 8b09 mov eax , dword ptr [ eax + 0290h ] ;0x0054846b : 8b8090020000 mov dword ptr [ ecx + 72 ] , eax ;0x00548471 : 894148 mov ecx , dword ptr [ ebp - 4 ] ;0x00548474 : 8b4dfc pop esi ;0x00548477 : 5e call Fun42bf1d ;0x00548478 : e8a03aeeff leave ;0x0054847d : c9 ret 0Ch ;0x0054847e : c20c00 4. APPLIES TO: VFP 10 (VFP Advanced) 5. REFERENCE WEBSITES: 1, baiyujia.com: http://www.baiyujia.com http://www.baiyujia.com/vfpdocuments/f_vfp9fix118.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix171.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix172.asp http://www.baiyujia.com/vfpdocuments/f_vhfox.asp 6. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |