Closed Bug 230138 Opened 21 years ago Closed 21 years ago

Crash when viewing a HTML page with certain display:tableXXX settings in CSS

Categories

(Core :: Layout: Tables, defect)

x86
All
defect
Not set
critical

Tracking

()

VERIFIED FIXED

People

(Reporter: moz, Assigned: bernd_mozilla)

References

()

Details

(Keywords: crash)

Attachments

(2 files)

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6b) Gecko/20031208 Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6b) Gecko/20031208 While trying some stuff I encountered this crash. I tried to minimize the HTML code so that it still crashes everytime. The problem seems to be related to the display: settings in the CSS part. The structure is something like <div> [display:table-column] <div> [display:table] <div> [display:table-cell] Reproducible: Always Steps to Reproduce: 1. Create HTML file with following content: <html> <head> <style type="text/css"> <!-- div.a1 { display:table; } div.a2 { display:table-cell; } div.left { display:table-column;} --> </style> </head> <body> <div class="left"> <div class="a1"></div> <div class="a2"></div> </div> </body> </html> 2. View it with Mozilla Actual Results: Access violation when trying to view the page. Probably a null pointer dereference. Expected Results: There is probably no "correct" way to render this, because it does not make too much sense, but at least Mozilla should not crash.
#5 <signal handler called> #6 0x06e16c30 in ProcessPseudoFrame (aPresContext=0x9ac6288, aPseudoData=@0xbfebd458, aParent=@0xbfebcec0) at /builds/trunk/mozilla/layout/html/style/src/nsCSSFrameConstructor.cpp:1776 #7 0x06e1705f in ProcessPseudoFrames (aPresContext=0x9ac6288, aPseudoFrames=@0xbfebd408, aHighestType=0x0, aHighestFrame=@0xbfebcec0) at /builds/trunk/mozilla/layout/html/style/src/nsCSSFrameConstructor.cpp:1875 #8 0x06e17272 in ProcessPseudoFrames (aPresContext=0x9ac6288, aPseudoFrames=@0xbfebd408, aItems=@0xbfebd018) at /builds/trunk/mozilla/layout/html/style/src/nsCSSFrameConstructor.cpp:1921 #9 0x06e19e87 in nsCSSFrameConstructor::TableProcessChildren(nsIPresShell*, nsIPresContext*, nsFrameConstructorState&, nsIContent*, nsIFrame*, nsTableCreator&, nsFrameItems&, nsIFrame*&) (this=0x9adc120, aPresShell=0x9adc1d0, aPresContext=0x9ac6288, aState=@0xbfebd3d0, aContent=0x9519fe0, aParentFrame=0x9af38d0, aTableCreator=@0xbfebd1d0, aChildItems=@0xbfebd018, aCaption=@0xbfebd020) at /builds/trunk/mozilla/layout/html/style/src/nsCSSFrameConstructor.cpp:3074 #10 0x06e1950e in nsCSSFrameConstructor::ConstructTableColFrame(nsIPresShell*, nsIPresContext*, nsFrameConstructorState&, nsIContent*, nsIFrame*, nsStyleContext*, nsTableCreator&, int, nsFrameItems&, nsIFrame*&, int&) (this=0x9adc120, aPresShell=0x9adc1d0, aPresContext=0x9ac6288, aState=@0xbfebd3d0, aContent=0x9519fe0, aParentFrameIn=0x9af3188, aStyleContext=0x9af3414, aTableCreator=@0xbfebd1d0, aIsPseudo=0, aChildItems=@0xbfebd4a0, aNewFrame=@0xbfebd1f0, aIsPseudoParent=@0xbfebd1c8) at /builds/trunk/mozilla/layout/html/style/src/nsCSSFrameConstructor.cpp:2832 #11 0x06e21b76 in nsCSSFrameConstructor::ConstructFrameByDisplayType(nsIPresShell*, nsIPresContext*, nsFrameConstructorState&, nsStyleDisplay const*, nsIContent*, int, nsIAtom*, nsIFrame*, nsStyleContext*, nsFrameItems&) (this=0x9adc120, aPresShell=0x9adc1d0, aPresContext=0x9ac6288, aState=@0xbfebd3d0, aDisplay=0x9af3440, aContent=0x9519fe0, aNameSpaceID=3, aTag=0x93e2780, aParentFrame=0x9af3188, aStyleContext=0x9af3414, aFrameItems=@0xbfebd4a0) (gdb) frame 6 #6 0x06e16c30 in ProcessPseudoFrame (aPresContext=0x9ac6288, aPseudoData=@0xbfebd458, aParent=@0xbfebcec0) at /builds/trunk/mozilla/layout/html/style/src/nsCSSFrameConstructor.cpp:1776 1776 rv = aParent->SetInitialChildList(aPresContext, nsnull, items->childList); (gdb) p aParent $1 = (class nsIFrame *&) @0xbfebcec0: 0x0 (gdb) up #7 0x06e1705f in ProcessPseudoFrames (aPresContext=0x9ac6288, aPseudoFrames=@0xbfebd408, aHighestType=0x0, aHighestFrame=@0xbfebcec0) at /builds/trunk/mozilla/layout/html/style/src/nsCSSFrameConstructor.cpp:1875 1875 rv = ProcessPseudoFrame(aPresContext, aPseudoFrames.mRow, aHighestFrame); (gdb) p aHighestFrame $2 = (class nsIFrame *&) @0xbfebcec0: 0x0 (gdb) up #8 0x06e17272 in ProcessPseudoFrames (aPresContext=0x9ac6288, aPseudoFrames=@0xbfebd408, aItems=@0xbfebd018) at /builds/trunk/mozilla/layout/html/style/src/nsCSSFrameConstructor.cpp:1921 1921 nsresult rv = ProcessPseudoFrames(aPresContext, aPseudoFrames, nsnull, highestFrame); (gdb) p aPseudoFrames $5 = (nsPseudoFrames &) @0xbfebd408: {mTableOuter = {mFrame = 0x0, mChildList = {childList = 0x0, lastChild = 0x0}, mChildList2 = { childList = 0x0, lastChild = 0x0}}, mTableInner = {mFrame = 0x0, mChildList = {childList = 0x0, lastChild = 0x0}, mChildList2 = { childList = 0x0, lastChild = 0x0}}, mRowGroup = {mFrame = 0x0, mChildList = {childList = 0x0, lastChild = 0x0}, mChildList2 = { childList = 0x0, lastChild = 0x0}}, mColGroup = {mFrame = 0x0, mChildList = {childList = 0x0, lastChild = 0x0}, mChildList2 = { childList = 0x0, lastChild = 0x0}}, mRow = {mFrame = 0x0, mChildList = { childList = 0x9afa044, lastChild = 0x9afa044}, mChildList2 = { childList = 0x0, lastChild = 0x0}}, mCellOuter = {mFrame = 0x0, mChildList = {childList = 0x0, lastChild = 0x0}, mChildList2 = { childList = 0x0, lastChild = 0x0}}, mCellInner = {mFrame = 0x0, mChildList = {childList = 0x0, lastChild = 0x0}, mChildList2 = { childList = 0x0, lastChild = 0x0}}, mLowestType = 0x93e3110} (gdb) up (gdb) p aState.mPseudoFrames.mLowestType $6 = (nsIAtom *) 0x93e3110 (gdb) x/wa $6 0x93e3110: 0x59dd68 <_ZTV19nsStaticAtomWrapper+8> (gdb) p *(class nsStaticAtomWrapper*)$ $7 = {<nsIAtom> = {<nsISupports> = { _vptr.nsISupports = 0x59dd68}, <No data fields>}, mStaticAtom = 0x73a8058} (gdb) p $.mStaticAtom $8 = (const nsStaticAtom *) 0x73a8058 (gdb) p *$ $9 = {mString = 0x734feef "TableRowFrame", mAtom = 0x73c0928}
Severity: normal → critical
Keywords: crash
confirmed with linux trunk 2004010508
Status: UNCONFIRMED → NEW
Ever confirmed: true
OS: Windows XP → All
Can you provide a URL for full web page that causes this problem? I'd like to test a possible fix... BTW, why is a brand new bug already assigned to nobody?
Confirmed Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.6b) Gecko/20040102 Firebird/0.7+
David, do you have any idea what should happen here. Should the children of the col simply suppressed?
bernd Hixie: whats should happen to a child of a display: table-column element, can it be ignored (no frame construction for the child) Hixie sicking: "children", probably in DOM Hixie bernd: spec doesn't say, last i checked, but yes, just assume table-column's children are display:none
Attached patch patchSplinter Review
I don't claim that I understand well table frame construction. I am pretty sure that exactly the opposite is true, but I believe that col frames shouldnt have childs, and even if they would have they will not been reflown see http://lxr.mozilla.org/seamonkey/source/layout/html/table/src/nsTableColFrame.cpp#154 so we should not create them.
Attachment #139221 - Flags: superreview?(bz-vacation)
Attachment #139221 - Flags: review+
taking so that I get this thing checked in
Assignee: nobody → bernd_mozilla
Comment on attachment 139221 [details] [diff] [review] patch sr=bzbarsky. Looks reasonable.
Attachment #139221 - Flags: superreview?(bz-vacation) → superreview+
fix checked in
Status: NEW → RESOLVED
Closed: 21 years ago
Resolution: --- → FIXED
Status: RESOLVED → VERIFIED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: