thot lib bug (PictInfo, _AbstractBox)

I think that I've found a bug in Amaya.

If I use Amaya to open a copy of the Html-3.2
Reference Spec, it takes a couple of seconds
to load, okay. 

But when I click on the scrollbar to scroll down,
it freezes. 

I decided to limit the max processor time and run
Amaya under GDB to see what was going on. This is
what happened:


--------------------------------------------------
Program received signal SIGXCPU, CPU time limit
exceeded.
RedrawFilledBoxes (frame=1, xmin=0, xmax=566,
ymin=258, ymax=516)
        at ../../thotlib/view/frame.c:243
243                     yorg += imageDesc->PicHeight;
(gdb) print yorg
$1 = 0
(gdb) print imageDesc->PicHeight
$2 = 0
(gdb) print ymin
$3 = 258


The following is the offending code in frame.c:
--------------------------------------------------
  imageDesc = (PictInfo *) pAb->AbPictBackground;
  if (imageDesc)
    {
      xorg = pBox->BxXOrg + pBox->BxLMargin +
pBox->BxLBorder + pBox->BxLPadding;
      yorg = pBox->BxYOrg + pBox->BxTMargin +
pBox->BxTBorder + pBox->BxTPadding;
      /* check the visibility of the background image
*/
      if (imageDesc->PicPresent == FillFrame)
        {
          while (xorg + imageDesc->PicWidth < xmin)
            xorg += imageDesc->PicWidth;
          xd = xorg;
          width = width + xmin - xorg;
          while (yorg + imageDesc->PicHeight < ymin)
243:            yorg += imageDesc->PicHeight;
          yd = yorg + FrameTable[frame].FrTopMargin;
          height = height + ymin - yorg;
        }



--------------------------------------------------
At the top, you see that `pAb' is cast to a
(PictInfo *) and assigned to `imageDesc.' Okay.

`imageDesc' is of type (PictInfo *)
`pAb' is of type (PtrAbstractBox)


But these two structures cannot be overlapped:
--------------------------------------------------
>From typemedia.h:


/* Description of an abstract images of a document
view */
typedef struct _AbstractBox
{
  PtrElement      AbElement;    /* Corresponding
element in the I.R. */
  PtrBox          AbBox;        /* Box descriptor
index */
  PtrAbstractBox  AbEnclosing;  /* Linking towards the
enclosing asbstr. box */
  PtrAbstractBox  AbNext;       /* Linking towards the
next sibling abstract box */
  PtrAbstractBox  AbPrevious;   /* Linking towards the
previous abstract box */
  PtrAbstractBox  AbFirstEnclosed;    /* Linking
towards the first child
                                         abstract box
*/
  PtrAbstractBox  AbNextRepeated;/* Linking towards
the next repeated
                                           abstract
box (laid out??) */
  PtrAbstractBox  AbPreviousRepeated; /* Linking
towards the previous
                                         repeated
abstract box */
  PtrPSchema      AbPSchema;    /* Presentation schema
of the abstract box */
  int             AbDocView;    /* Document view
number */
  PtrCopyDescr    AbCopyDescr;  /* Descriptor of the
copied element if the



--------------------------------------------------
>From picture.h:


typedef struct 
{
  int            PicXArea;
  int            PicYArea;
  int            PicWArea;
  int            PicHArea;
  int            PicWidth;
  int            PicHeight;
  PictureScaling PicPresent;
  int            PicType;
  CHAR_T*        PicFileName; 
  Pixmap         PicPixmap;
  int            PicNbColors;
  int           *PicColors;
  Pixmap         PicAlpha;
# ifndef _WINDOWS
  Pixmap         PicMask;
# else  /* _WINDOWS */
  int            bgRed;
  int            bgGreen;
  int            bgBlue;
# endif /* _WINDOWS */
  ThotBool       mapped;         /* Used for
ExtraHandlers */
  ThotBool       created;        /* Used for
ExtraHandlers */
  ThotWidget     wid;            /* Used for
ExtraHandlers */
  void*          pluginInstance; /* Used for
ExtraHandlers */
} PictInfo;


--------------------------------------------------
As you can see, they are very different structures. 

This sort of thing would have been caught from the
get-go, were it not for the typecast. 

I don't know anything about the Thot library or 
what the original author intended to do, but I do
think
that this demonstrates the danger of typecasts. :-)







__________________________________________________
Do You Yahoo!?
Send online invitations with Yahoo! Invites.
http://invites.yahoo.com

Received on Monday, 17 April 2000 06:27:52 UTC