[comp.sys.amiga] GOMF/CEDPro Interaction Isolated

perry@madnix.UUCP (Perry Kivolowitz) (02/01/90)

I Received The Following Today:

==========================
amiga.dev/main #10513, from bdawson, 2165 chars, Tue Jan 30 03:48:03 1990
--------------------------
TITLE: GOMF bug


        A  problem  was  reported  a few weeks ago about CygnusEd, or more
specifically  the  freely  distributable  req.library  that CygnusEd uses,
tromping  on  location $78 when bringing up the file requester.  There was
some suspicion at the time that this was actually caused by GOMF3.0 rather
than req.library, since it only happened with GOMF present.

        This  suspicion  has  now  been confirmed.  GOMF3.0 has a bug in it
where GOMF itself will tromp on location $78 if a call to OpenWindow fails.
GOMF  then reports that somebody has tromped on location $78, not realizing
that it is telling on itself.

        The  problem  occurs because GOMF does a SetFunction on OpenWindow.
It  does this so that it can write the task pointer of the task opening the
window  into the wb_ExtData and wb_UserData fields of the Window structure.
This   allows  it  to  implement  resource  tracking,  of  windows  anyway.
Unfortunately, it doesn't check for failure of the OpenWindow call.  Below,
for those who are interested in such things, is the code in question.

        Although  the  problem is with GOMF, future versions of req.library
(due to be distributed on networks and with CygnusEd very soon) will have a
check to almost completely eliminate the problem, by not calling OpenWindow
if it can be told that calling it would probably fail.

        Here's  the  code  (from  GOMF),  disassembled by following the new
OpenWindow vector:


SetFunctionedOpenWindow
        BSR.L   FindCurrentTask
        MOVE.L  A2,-(SP)
        MOVEA.L OldOpenWindow,A2
        JSR     (A2)            ;Call the old open window function.
				;Notice it does not check to see
				;if OldOpenWindow failed!!! It simply
				;starts using the value returned in
				;D0!!!
        EXG     D0,A2			;A2 could be getting ZERO!!!
        MOVE    TaskPointer,$78(A2)     ;wd_UserData - BING BING BING
        MOVE.L  $74(A2),D0
        BNE.L   SkipExtDataLoad
        MOVE.L  TaskPointer,$74(A2)     ;wd_ExtData
SkipExtDataLoad
        EXG     D0,A2
        MOVEA.L (SP),A2
        RTS

FindCurrentTask
        MOVEM.L D0/A1/A6,-(SP)
        MOVEA.L #0,A1
        MOVEQ   #0,D0
        MOVEA.L ExecBaseCopy,A6
        JSR     _LVOFindTask(A6)
        MOVE.L  D0,TaskPointer		; My, this doesn't look very 
					; Re-entrant.
        MOVEM.L (SP)+,D0/A1/A6
        RTS

--------------------------------------------------------------------------

Thank  you  to all who gave us clues.  We found the problem.  The author of
GOMF  has been notified.  Please spread this message around far and wide so
that people will not mistakenly believe CEDPro is the cause.


-- 
Perry Kivolowitz, ASDG Inc. ``We look for things. Things that make us go.''
	UUCP:  {harvard|rutgers|ucbvax}!uwvax!astroatc!nicmad!madnix!perry
	CIS:   76004,1765 PLINK: pk-asdg