------------------------------------------------------------
[BUG/PRB.] VFP 9.0 FIX - ACCESS AND ASSIGN METHODS
January 2025
------------------------------------------------------------
CCB
1. BUG:
In vfp9 (and vfp6, vfp7, vfp8), we can use the Access and Assign methods to execute code when querying or changing property values,
but when SET("STATUS BAR")="OFF" and SET("TALK")="ON", sometimes VFP will crash.
1, There is a program for test:
*PROC testaccessandassign
SET STEP OFF
SET ECHO OFF
SET DEBUG OFF
SET ESCAPE OFF
SET TALK OFF
SET SAFETY OFF
_SCREEN.VISIBLE=.T.
_SCREEN.WINDOWSTATE=2
CLOSE DATABASES ALL
CLOSE TABLES ALL
SET STATUS BAR OFF
SET TALK ON
DO FORM testaccessandassign.scx
CLOSE DATABASES ALL
CLOSE TABLES ALL
RETURN
* END OF PROC TESTACCESSANDASSIGN.
2, In the file testaccessandassign.scx:
PROCEDURE olabel_access
*To do: Modify this routine for the Access method
IF TYPE("THIS.olabel")#"O"
SET STATUS BAR OFF
SET TALK ON
WAIT WIND 'SET("STATUS BAR") = '+SET("STATUS BAR")
WAIT WIND 'SET("TALK") = '+SET("TALK")
THIS.olabel=THISFORM.label1
WAIT WIND 'SET("STATUS BAR") = '+SET("STATUS BAR")
WAIT WIND 'SET("TALK") = '+SET("TALK")
ENDI
RETURN THIS.olabel
If we set the olabel property to a Logical data (or a Numeric data) in the Form Designer:
olabel = .F.
there is no problem.
But if we set the olabel property to a Character data in the Form Designer:
olabel = "aaa"
after vfp run the code:
THIS.olabel=THISFORM.label1
VFP will crash.
3, In the file Samples\chartssample_builder.scx of the FoxCharts v1.20:
PROCEDURE ofoxcharts_access
* Make sure we have a FoxCharts object
IF VARTYPE(This.oFoxcharts) <> "O"
This.oFoxcharts = EVALUATE(This.oFoxCharts)
ENDIF
RETURN This.oFoxcharts
If we set the ofoxcharts property to a Character data in the Form Designer:
ofoxcharts = "Thisform.FoxCharts1"
after vfp run the code:
This.oFoxcharts = EVALUATE(This.oFoxCharts)
VFP will crash.
There is no the PROCEDURE ofoxcharts_access in the FoxCharts v1.37b,
so there is no the problem in the FoxCharts v1.37b.
2. CAUSE:
There are some BUGs in the following code.
3. RESOLUTION:
We can write some code to fix the BUG.
Fun53cefe :: ; proc near
cmp byte ptr [esi] , 076h ;0x0053cefe : 803e76
je Label58d91f ;0x0053cf01 : 0f84180a0500
Label53cf07 ::
mov ecx , dword ptr [ esi + 32 ] ;0x0053cf07 : 8b4e20
test ecx , ecx ;0x0053cf0a : 85c9
mov byte ptr [esi] , 049h ;0x0053cf0c : c60649
jne Label529447 ;0x0053cf0f : 0f8532c5feff
Label53cf15 ::
mov ecx , dword ptr [ esi + 36 ] ;0x0053cf15 : 8b4e24
test ecx , ecx ;0x0053cf18 : 85c9
jne Label5028ea ;0x0053cf1a : 0f85ca59fcff
Label53cf20 ::
mov eax , dword ptr [ esi + 40 ] ;0x0053cf20 : 8b4628
test eax , eax ;0x0053cf23 : 85c0
jne Label58d92e ;0x0053cf25 : 0f85030a0500
ret ;0x0053cf2b : c3
Label529447 ::
;
; -------------------------------------------------
; VFP 9.0 FIX - ACCESS AND ASSIGN METHODS
; December 2014
; -------------------------------------------------
; CCB
;
; Use the Access and Assign methods when SET("STATUS BAR")="OFF" and SET("TALK")="ON", sometimes VFP will crash.
;
; 2014/12/7, by ccb
;
mov ecx , dword ptr [ esi + 32 ]
test ecx,ecx
je Label52944c
mov eax,dword ptr [ecx]
test eax,eax
je Label52944c
push ecx
push eax
sub eax,08h
push 08h
push eax
call vfpa_isbadreadptr
test eax,eax
pop eax
pop ecx
jne Label52944c
push ecx
push eax
sub eax,08h
push dword ptr [eax+04h]
push eax
call vfpa_isbadreadptr
test eax,eax
pop eax
pop ecx
jne Label52944c
call Fun42c1e2 ;0x00529447 : e8962df0ff
Label52944c ::
mov dword ptr [ esi + 32 ] , 00h ;0x0052944c : c7462000000000
jmp Label53cf15 ;0x00529453 : e9bd3a0100
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_vfp9fix225.asp
2, foxite.com:
http://www.foxite.com/archives/vfp-c-compiler-and-app-0000362799.htm
3, codeplex.com:
http://vfpx.codeplex.com/wikipage?title=FoxCharts#
6. OTHER:
For reference only, there is no guarantees.
Any questions or suggestions, please send me an email at ccb2000@163.com.
|