------------------------------------------------------------
[BUG/PRB.] VFP 9.0 FIX - SET() FUNCTION
January 2026
------------------------------------------------------------
CCB
1. BUG:
In vfp9 (and vfp6, vfp7, vfp8), the SET("FILTER") function causes the error "Line is too long (Error 18)" if LEN(FILTER()) > 255.
There is the bug for the following functions:
SET("FILTER")
SET("HELPFILTER")
SYS(2001,"FILTER")
SYS(2001,"HELPFILTER")
There is no the bug for the FILTER() function.
There is a test program:
*PROC testsetfilterfunction
SET FILTER TO fld1="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"+;
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
?SET("FILTER") && no error
?SYS(2001,"FILTER") && no error
SET FILTER TO fld1="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"+;
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa".OR.;
fld1="bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"+;
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
?SET("FILTER") && causes the error "Line is too long (Error 18)" in vfp9!
?SYS(2001,"FILTER") && causes the error "Line is too long (Error 18)" in vfp9!
RETURN
* END OF PROC TESTSETFILTERFUNCTION.
2. CAUSE:
There are some BUGs in the following code.
3. RESOLUTION:
We can write some code to fix the BUG.
Label4eb178 ::
mov eax , dword ptr [ Data9370f8 ] ;0x004eb178 : a1f8709300
mov eax , dword ptr [eax] ;0x004eb17d : 8b00
mov eax , dword ptr [ eax + 32 ] ;0x004eb17f : 8b4020
Label4eb182 ::
test eax , eax ;0x004eb182 : 85c0
je Label4fe606 ;0x004eb184 : 0f847c340100
test byte ptr [ eax + 16 ] , 020h ;0x004eb18a : f6401020
je Label4fe606 ;0x004eb18e : 0f8472340100
cmp dword ptr [ eax + 80 ] , 00h ;0x004eb194 : 83785000
je Label4fe606 ;0x004eb198 : 0f8468340100
;
; -------------------------------------------------
; VFP 9.0 FIX - SET("FILTER") FUNCTION
; January 2023
; -------------------------------------------------
; CCB
;
; In vfp9, the SET("FILTER") function causes the error "Line is too long (Error 18)" if LEN(FILTER()) > 255.
;
; 2023/1/10, by ccb
;
; pushd 0100h ;0x004eb19e : 6800010000
; push dword ptr [ ebp + 8 ] ;0x004eb1a3 : ff7508
; call Fun4eb1b0 ;0x004eb1a6 : e805000000
; jmp Label4fb7fe ;0x004eb1ab : e94e060100
mov ebx , eax
mov eax , 04000h
pushd 0102Eh
call Fun42bf2a
xor esi , esi
mov dword ptr [ ebp + 0FFFFFDB8h ] , eax
mov dword ptr [ ebp + 0FFFFFDB4h ] , esi
mov ecx , dword ptr [eax]
mov eax , ebx
pushd 04000h
push ecx
call Fun4eb1b0
jmp Label4d9e6b
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
6. OTHER:
For reference only, there is no guarantees.
Any questions or suggestions, please send me an email at ccb2000@163.com.
|