Closed Bug 280009 Opened 20 years ago Closed 20 years ago

Crash when reloading hovering over animated gif and then reloading (using tr:hover,td:hover {display:table-caption}) [@ nsFrame::GetOffsetFromView] [@ nsIFrame::Invalidate] [@ nsImageFrame::FrameChanged]

Categories

(Core :: Layout: Tables, defect)

x86
All
defect
Not set
critical

Tracking

()

VERIFIED FIXED

People

(Reporter: martijn.martijn, Assigned: bernd_mozilla)

Details

(Keywords: crash, testcase)

Crash Data

Attachments

(6 files)

See upcoming testcase.

- hover over animated gif
- reload

Result-> crash

Reproduced with:
Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8b) Gecko/20050126 Firefox/1.0+
Attached file Testcase
Severity: normal → critical
Talkback ID: TB3320364X (the Talkback server is not ready yet at this moment)
Ok, this is the talkback data:

nsFrame::GetOffsetFromView 
[c:/builds/tinderbox/Fx-Trunk/WINNT_5.0_Clobber/mozilla/layout/generic/nsFrame.cpp,
line 2352]
nsImageFrame::FrameChanged 
[c:/builds/tinderbox/Fx-Trunk/WINNT_5.0_Clobber/mozilla/layout/generic/nsImageFrame.cpp,
line 715]
nsImageListener::FrameChanged 
[c:/builds/tinderbox/Fx-Trunk/WINNT_5.0_Clobber/mozilla/layout/generic/nsImageFrame.cpp,
line 2131]
imgRequest::FrameChanged 
[c:/builds/tinderbox/Fx-Trunk/WINNT_5.0_Clobber/mozilla/modules/libpr0n/src/imgRequest.cpp,
line 370]
nsTimerImpl::Fire 
[c:/builds/tinderbox/Fx-Trunk/WINNT_5.0_Clobber/mozilla/xpcom/threads/nsTimerImpl.cpp,
line 396]
nsAppStartup::Run 
[c:/builds/tinderbox/Fx-Trunk/WINNT_5.0_Clobber/mozilla/toolkit/components/startup/src/nsAppStartup.cpp,
line 146]
main 
[c:/builds/tinderbox/Fx-Trunk/WINNT_5.0_Clobber/mozilla/browser/app/nsBrowserApp.cpp,
line 60]
KERNEL32.DLL + 0x2893d (0x7c59893d)
Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.8b) Gecko/20050127

Also crashs Mozilla Trunk, TB3330611Z, link below maybe valid in about 4 hours.

http://talkback-public.mozilla.org/talkback/fastfind.jsp?search=2&type=iid&id=TB3330611Z
I just noticed that the <tr> is growing, while hovering, so the small gif moves
to the right. Don´t know if this is related to the crash, or to another bug.

Same seen on testcase of 
Bug  275917 td:hover {display:block} causes crash on reload when animated gif
inside [@ nsIFrame::Invalidate ]

https://bugzilla.mozilla.org/attachment.cgi?id=169515
Keywords: testcase
OS: Windows 2000 → All
Crash occurs on Reload...
Attachment #172616 - Attachment description: Frame dump (for Testcase #2) → Frame dump (for Testcase #2 - before Reload)
Depends on: 275548
Summary: Crash when reloading hovering over animated gif and then reloading (using tr:hover,td:hover {display:table-caption}) → Crash when reloading hovering over animated gif and then reloading (using tr:hover,td:hover {display:table-caption}) [@ nsFrame::GetOffsetFromView]
OK, I'm lost in the little jungle of TableProcessChildren.  It's clear that
someone is screwing up the pseudo-frame state, but I can't tell who.

Simply not passing aTableCreator when we call ProcessChildren on the kids of the
caption helps some, but still not enough.
I crashed with Mozilla 1.8b build 2005012606 on WinNT4 at testcase 1 with
slightly different stack signatures, see TB reports
http://talkback-public.mozilla.org/talkback/fastfind.jsp?search=2&type=iid&id=TB3326771X
http://talkback-public.mozilla.org/talkback/fastfind.jsp?search=2&type=iid&id=TB3326777M
Change the summary to reflect that.

(In reply to comment #5)
> I just noticed that the <tr> is growing, while hovering, so the small gif moves
> to the right. Don´t know if this is related to the crash, or to another bug.

For me the images moves DOWN if I hover it. I'm curious, can someone explain me
my the image moves?
Summary: Crash when reloading hovering over animated gif and then reloading (using tr:hover,td:hover {display:table-caption}) [@ nsFrame::GetOffsetFromView] → Crash when reloading hovering over animated gif and then reloading (using tr:hover,td:hover {display:table-caption}) [@ nsFrame::GetOffsetFromView] [@ nsIFrame::Invalidate] [@ nsImageFrame::FrameChanged]
Note that the actual stack signatures are irrelevant -- they all point to a
deleted image frame being accessed.

The image moves because we screw up removing table pseudo-frames; we have
existing bugs on that.
Is this a regression or an old crash, like it also crashes FF 1.0?
(In reply to comment #12)
> Is this a regression or an old crash, like it also crashes FF 1.0?

Firefox 1.0 on Win98
1st testcase: load, hover, reload
http://talkback-public.mozilla.org/talkback/fastfind.jsp?search=2&type=iid&id=TB3387549K
2nd testcase: load, reload
http://talkback-public.mozilla.org/talkback/fastfind.jsp?search=2&type=iid&id=TB3387621E
Blocks: 281527
No longer blocks: 281527
bernd: the only real way we can mess this up is to create an image frame and
then lose it from the frame tree altogether...
Attached file testcase
It looks like we create the inner caption but don't append it to the frame tree
Attached patch patchSplinter Review
Assignee: nobody → bernd_mozilla
Status: NEW → ASSIGNED
Attachment #176919 - Flags: superreview?(bzbarsky)
Attachment #176919 - Flags: review?(bzbarsky)
No longer depends on: 275548
Bernd, why does that help in this case?  What's aParentFrame in this case?
First note: this function is only called for captions. Its probably somehow
misnamed but I dont have good idea how to name it.

what does this code

-  if (nsLayoutAtoms::tableOuterFrame == aParentFrame->GetType()) {
-    return aParentFrame;
-  }
-  return aParentFrame->GetParent();

if the parent is the outer table frame use it as caption parent, for *all* other
use the  grandparent. This works usually fine as the caption in content space is
a table child so we end here usually with a table frame take the parent of the
table which is the outer and every thing is in the green region. But breaks if
some strange table frame gets display: table-caption.

What will the code below do?

+  if (nsLayoutAtoms::tableFrame == aParentFrame->GetType()) {
+    return aParentFrame->GetParent();;
+   }
+  return aParentFrame;

If the caption is below a table frame take the grandparent and attach the
caption to the outer table frame. For all other cases take what you get as a
parent build then the necessary pseudo frames.

why do we crash, so we start with a caption, then we create below it another
caption and take as a parent not the caption but the parent of the caption so we
have two captions below the same parent...
So instead of 

P       we have P
Tbl C1          Tbl C1 C2
    C2

and we don't process then correctly the second caption so it gets lossed from
the frame tree.
Comment on attachment 176919 [details] [diff] [review]
patch

How about renaming the method to AdjustCaptionParentFrame?
Attachment #176919 - Flags: superreview?(bzbarsky)
Attachment #176919 - Flags: superreview+
Attachment #176919 - Flags: review?(bzbarsky)
Attachment #176919 - Flags: review+
fix checked in the checkin comment wrongly references bug 284575
Status: ASSIGNED → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
Status: RESOLVED → VERIFIED
*** Bug 290912 has been marked as a duplicate of this bug. ***
Crash Signature: [@ nsFrame::GetOffsetFromView] [@ nsIFrame::Invalidate] [@ nsImageFrame::FrameChanged]
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: