Re: repeatable header foot pagenum crasher on win32


Subject: Re: repeatable header foot pagenum crasher on win32
From: Matti Picus (matti@picus.org)
Date: Sun Sep 23 2001 - 15:50:54 CDT


Summary: Open a new document. Create a header with some text. Create a
footer with some text. Put the cursor into the header and insert a page
number into the footer. BOOM.

Something seems to be fishy with FL_DocLayout::findBlockAtPosition(), here
is the code snippet that triggers the assert:
         if(pBL->getSectionLayout()->getType() == FL_SECTION_HDRFTR)
         {
                 fl_HdrFtrShadow * pShadow = NULL;
                 FV_View * pView = getView();
                 if(pView && pView->isHdrFtrEdit())
                 {
                         pShadow = pView->getEditShadow();
                 }
                 else
                 {
                         pShadow = ((fl_HdrFtrSectionLayout *)
pBL->getSectionLayout())->getFirstShadow();
                 }
                 fl_BlockLayout * ppBL = NULL;
                 if(pShadow != NULL)
                         ppBL = pShadow->findMatchingBlock(pBL);
                 else
                 {

The call ppBL = pShadow->findMatchingBlock(pBL) fails, no matching block is
found.

Could it be a problem that the cursor is in the header but the page number
is inserted into the footer?

Here is the call stack, for completeness:
fl_HdrFtrShadow::findMatchingBlock(fl_BlockLayout * 0x00c5fa68) line 2989 +
31 bytes
FL_DocLayout::findBlockAtPosition(unsigned int 62) line 523 + 12 bytes
FV_View::_findBlockAtPosition(unsigned int 62) line 1395 + 18 bytes
FV_View::getBlockFormat(const char * * * 0x0012fb48, unsigned char 1) line
3469 + 15 bytes
FV_View::notifyListeners(const unsigned short 1207) line 538
FV_View::_generalUpdate() line 5526
FV_View::processPageNumber(HdrFtrType FL_HDRFTR_FOOTER, const char * *
0x0012fbe8) line 3147
s_doInsertPageNumbers(FV_View * 0x00c46768) line 6022
ap_EditMethods::insPageNo(AV_View * 0x00c46768, EV_EditMethodCallData *
0x0012fc44) line 6029 + 9 bytes
EV_Menu::invokeMenuMethod(AV_View * 0x00c46768, EV_EditMethod * 0x007dc570,
unsigned short * 0x00000000, unsigned int 0) line 201 + 18 bytes
EV_Win32Menu::onCommand(AV_View * 0x00c46768, HWND__ * 0x0003032e, unsigned
int 1087) line 152
XAP_Win32Frame::_FrameWndProc(HWND__ * 0x0003032e, unsigned int 273,
unsigned int 1087, long 0) line 410 + 31 bytes

Matti

At 01:53 PM 23/9/2001 -0400, you wrote:
>Alan Horkan wrote:
> > crash
> >
> > this was repeatable on windows 2000 using the
> > 2001-09-21 build from http://www.niksbiks.dk/Abi/
>
>I can duplicate the crash using the same build on Win95 (the OEM version
>(last)).
>
> > Error Message
> > The instruction at "0x0046eb95" referenced memory at "0x00000084". The
> > memory could not be "read".
>
>I started the debugger and found the PC at that address ("0x0046eb95").
>The instruction at this address is:
>mov ecx.dword ptr(eax+84h)
>
>For kicks, I then started to read up on and then try a stack trace. Is
>a stack trace the same as viewing the Call Stack? This was easy enough
>to do using View --> Debug Windows --> Call Stack. There wasn't much
>there, just one entry:
>
>"ABIWORD 0046eb95()"
>
>Randy Kramer
>Trying to learn so that when I get an unrepeatable crash I can collect
>useful information.



This archive was generated by hypermail 2b25 : Sun Sep 23 2001 - 14:51:42 CDT