---------------------------------------------------------------------------------------------
[ENHANCED] VFP 9.0 FIX - THE MAXIMUM NUMBER OF CHARACTERS FOR THE GETENV() FUNCTION
January 2026
---------------------------------------------------------------------------------------------
CCB
1. BUG:
In vfp9 (and vfp6, vfp7, vfp8), the maximum number of characters for the GETENV() function is 255,
now the maximum number of characters for the GETENV() function is 8191.
2. CAUSE:
There are some BUGs in the following code.
3. RESOLUTION:
We can write some code to fix the BUG.
Label45e0cc ::
push ebp ;0x0045e0cc : 55
mov ebp , esp ;0x0045e0cd : 8bec
and esp , 0FFFFFFF8h ;0x0045e0cf : 83e4f8
;
; ----------------------------------------------------------------------------------
; VFP 9.0 FIX - THE MAXIMUM NUMBER OF CHARACTERS FOR THE GETENV() FUNCTION
; November 2019
; ----------------------------------------------------------------------------------
; CCB
;
; In vfp9, the maximum number of characters for the GETENV() function is 255,
; now the maximum number of characters for the GETENV() function is 8191.
;
; 2019/11/20, by ccb
;
; sub esp , 020Ch ;0x0045e0d2 : 81ec0c020000
mov eax , 0220Ch ;0x0045e0d2 : 81ec0c020000
call Fun42c118
mov eax , dword ptr [ Data937090 ] ;0x0045e0d8 : a190709300
push ebx ;0x0045e0dd : 53
push esi ;0x0045e0de : 56
push edi ;0x0045e0df : 57
;
; ----------------------------------------------------------------------------------
; VFP 9.0 FIX - THE MAXIMUM NUMBER OF CHARACTERS FOR THE GETENV() FUNCTION
; November 2019
; ----------------------------------------------------------------------------------
; CCB
;
; In vfp9, the maximum number of characters for the GETENV() function is 255,
; now the maximum number of characters for the GETENV() function is 8191.
;
; 2019/11/20, by ccb
;
; mov dword ptr [ esp + 0214h ] , eax ;0x0045e0e0 : 89842414020000
mov dword ptr [ esp + 0214h ][02000h] , eax ;0x0045e0e0 : 89842414020000
call Fun420d8c ;0x0045e0e7 : e8a02cfcff
mov esi , eax ;0x0045e0ec : 8bf0
mov dword ptr [ esp + 12 ] , esi ;0x0045e0ee : 8974240c
call Fun42371d ;0x0045e0f2 : e82656fcff
mov ecx , dword ptr [ esi + 8 ] ;0x0045e0f7 : 8b4e08
mov eax , 0FFh ;0x0045e0fa : b8ff000000
cmp ecx , eax ;0x0045e0ff : 3bc8
ja Label45e105 ;0x0045e101 : 7702
mov eax , ecx ;0x0045e103 : 8bc1
Label45e105 ::
mov edx , dword ptr [ esi + 32 ] ;0x0045e105 : 8b5620
mov esi , dword ptr [edx] ;0x0045e108 : 8b32
mov ecx , eax ;0x0045e10a : 8bc8
mov edx , ecx ;0x0045e10c : 8bd1
shr ecx , 02h ;0x0045e10e : c1e902
lea edi , dword ptr [ esp + 16 ] ;0x0045e111 : 8d7c2410
rep movsd ;0x0045e115 : f3a5
mov ecx , edx ;0x0045e117 : 8bca
and ecx , 03h ;0x0045e119 : 83e103
rep movsb ;0x0045e11c : f3a4
lea esi , dword ptr [ esp + 16 ] ;0x0045e11e : 8d742410
mov ecx , esi ;0x0045e122 : 8bce
mov byte ptr [ esp + eax + 16 ] , 00h ;0x0045e124 : c644041000
call Fun414a67 ;0x0045e129 : e83969fbff
;
; ----------------------------------------------------------------------------------
; VFP 9.0 FIX - THE MAXIMUM NUMBER OF CHARACTERS FOR THE GETENV() FUNCTION
; November 2019
; ----------------------------------------------------------------------------------
; CCB
;
; In vfp9, the maximum number of characters for the GETENV() function is 255,
; now the maximum number of characters for the GETENV() function is 8191.
;
; 2019/11/20, by ccb
;
; pushd 0100h ;0x0045e12e : 6800010000
pushd 02000h ;0x0045e12e : 6800010000
mov eax , esi ;0x0045e133 : 8bc6
push eax ;0x0045e135 : 50
lea ebx , dword ptr [ esp + 0118h ] ;0x0045e136 : 8d9c2418010000
call Fun41513d ;0x0045e13d : e8fb6ffbff
mov eax , dword ptr [ esp + 12 ] ;0x0045e142 : 8b44240c
mov ecx , ebx ;0x0045e146 : 8bcb
push ecx ;0x0045e148 : 51
call Fun53c75b ;0x0045e149 : e80de60d00
;
; ----------------------------------------------------------------------------------
; VFP 9.0 FIX - THE MAXIMUM NUMBER OF CHARACTERS FOR THE GETENV() FUNCTION
; November 2019
; ----------------------------------------------------------------------------------
; CCB
;
; In vfp9, the maximum number of characters for the GETENV() function is 255,
; now the maximum number of characters for the GETENV() function is 8191.
;
; 2019/11/20, by ccb
;
; mov ecx , dword ptr [ esp + 0214h ] ;0x0045e14e : 8b8c2414020000
mov ecx , dword ptr [ esp + 0214h ][02000h] ;0x0045e14e : 8b8c2414020000
call Fun42bf1d ;0x0045e155 : e8c3ddfcff
pop edi ;0x0045e15a : 5f
pop esi ;0x0045e15b : 5e
pop ebx ;0x0045e15c : 5b
mov esp , ebp ;0x0045e15d : 8be5
pop ebp ;0x0045e15f : 5d
ret ;0x0045e160 : c3
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
http://www.baiyujia.com/vfpdocuments/f_vfp9fix28.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix102.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix103.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix287.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix354.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix355.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix356.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix357.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix386.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix387.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix388.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix389.asp
2, microsoft.com:
https://blogs.msdn.microsoft.com/calvin_hsia/2005/12/09/getenv-environment-variable-question/
6. OTHER:
For reference only, there is no guarantees.
Any questions or suggestions, please send me an email at ccb2000@163.com.
|