Closed Bug 19494 Opened 25 years ago Closed 25 years ago

CRASH on page with missing glyphs, form, floats...

Categories

(Core :: Layout, defect, P1)

x86
Windows 98
defect

Tracking

()

VERIFIED FIXED

People

(Reporter: ian, Assigned: buster)

References

()

Details

(Whiteboard: fix in hand)

Attachments

(1 file)

This page:
   http://www.bath.ac.uk/%7Epy8ieh/internet/eviltests/glyphs.html
...crashes Viewer and Mozilla on Windows 98 with the 1999111909 build.

I haven't yet narrowed this down. I'll try to do it tomorrow.

This is the "worst case scenario" test page used for bug 6585.
Blocks: 6585
Whiteboard: (py8ieh:will narrow down)
Assignee: troy → kipp
Something whacky in the block code and its handling of floaters

nsBlockBandData::ComputeAvailSpaceRect() line 151 + 18 bytes
nsBlockBandData::ClearFloaters(int 6393, unsigned char 3) line 253
nsBlockReflowState::ClearFloaters(int 6393, unsigned char 3) line 5306 + 28
bytes
nsBlockReflowState::ClearPastFloaters(unsigned char 3) line 829
nsBlockReflowState::RecoverStateFrom(nsLineBox * 0x0261c750, int 1, int 0,
nsRect * 0x0012e6d0) line 942 + 17 bytes
nsBlockFrame::RecoverStateFrom(nsBlockReflowState & {...}, nsLineBox *
0x0261c750, int 0, nsRect * 0x0012e6d0) line 2287
nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}) line 2462
nsBlockFrame::Reflow(nsBlockFrame * const 0x024fd4e0, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0)
line 1490 + 15 bytes
nsBlockReflowContext::ReflowBlock(nsIFrame * 0x024fd4e0, const nsRect & {...},
int 1, int 0, int 1, nsMargin & {...}, unsigned int & 0) line 259 + 45 bytes
nsBlockFrame::ReflowBlockFrame(nsBlockReflowState & {...}, nsLineBox *
0x024fd608, int * 0x0012efc0) line 3256 + 59 bytes
nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineBox * 0x024fd608, int
* 0x0012efc0, int 1) line 2622 + 20 bytes
nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}) line 2433 + 27 bytes
nsBlockFrame::Reflow(nsBlockFrame * const 0x024fc3d8, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0)
line 1490 + 15 bytes
nsAreaFrame::Reflow(nsAreaFrame * const 0x024fc3d8, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0)
line 289 + 25 bytes
nsContainerFrame::ReflowChild(nsIFrame * 0x024fc3d8, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 0, int 0,
unsigned int 0, unsigned int & 0) line 637 + 31 bytes
RootFrame::Reflow(RootFrame * const 0x02533fc8, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0)
line 334
nsContainerFrame::ReflowChild(nsIFrame * 0x02533fc8, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 0, int 0,
unsigned int 1, unsigned int & 0) line 637 + 31 bytes
nsScrollFrame::Reflow(nsScrollFrame * const 0x0256e9a0, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0)
line 624
nsContainerFrame::ReflowChild(nsIFrame * 0x0256e9a0, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, int 0, int 0,
unsigned int 0, unsigned int & 0) line 637 + 31 bytes
ViewportFrame::Reflow(ViewportFrame * const 0x02533ee0, nsIPresContext & {...},
nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0)
line 527
nsHTMLReflowCommand::Dispatch(nsHTMLReflowCommand * const 0x02600a80,
nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsSize & {...},
nsIRenderingContext & {...}) line 145
PresShell::ProcessReflowCommands(PresShell * const 0x025a4958) line 1650
PresShell::ExitReflowLock(PresShell * const 0x025a4958, int 1, int 1) line 709
PresShell::ContentAppended(PresShell * const 0x025a4960, nsIDocument *
0x01f0ec20, nsIContent * 0x0256119c, int 16) line 2100
nsDocument::ContentAppended(nsDocument * const 0x01f0ec20, nsIContent *
0x0256119c, int 16) line 1515
nsHTMLDocument::ContentAppended(nsHTMLDocument * const 0x01f0ec20, nsIContent *
0x0256119c, int 16) line 1041
The testcase for bug 17567 is also reproducibly crashing the browser before
it displays. The latest comment on bug 6585 seem apropos here... if the
"We need to write some more code" is in the midst of being addressed...

The same sort of crashing/hanging problem has come and gone more than once for
testcases for different sections of the HTML 4 Character entities DTDs
http://bugzilla.mozilla.org/showattachment.cgi?attach_id=2617 (working now).
At the time that bug 17958 was filed, ⟩ and ⟨ were the only culprits
causing crashes there, and the ISO 8859-1 characters caused a hang, but a week
earlier they weren't, and several other entities in other sections were.

I wish I knew of something better than binary search for this...
No glyphs required to crash viewer -- here is a simplified test case:
   http://www.bath.ac.uk/%7Epy8ieh/internet/projects/mozilla/clear-crash.html
The SELECT element, a long line of floaters and 'clear' all seem to be required
to cause the crash. During simplification, some of the tests just hung instead
of crashing, but I could not see a particular pattern.
Updating to default Layout Assignee...kipp no longer with us :-(
Why are you re-reassing layout bugs? Do NOT touch layout bugs.

The bugs are assigned to Kipp so they can stay neatly organized until we have a
new owner for the block/inline code.
mass moving all Kipp's pre-beta bugs to M15.  Nisheeth and I will
prioritize these and selectively move high-priority bugs into M13 and M14.
Target Milestone: M15 → M14
crashes moved up to M14
Priority: P3 → P1
Assignee: kipp → buster
Whiteboard: (py8ieh:will narrow down) → fix in hand
the problem was nsBlockBandData::ClearFloaters() bypassed the code that manages
the mTrapezoids data structure relative to mCount and mSize.  I fixed this by
factoring out the management code into nsBlockBandData::GetBandData(), calling
GetBandData() from ClearFloaters(), adding a bunch of assertions to catch this
condition should it ever arise again, and adding a comment that nsBlockBandData
should never call mSpaceManager->GetBandData() directly, only through
nsBlockBandData::GetBandData().
Attached patch patchSplinter Review
Status: NEW → RESOLVED
Closed: 25 years ago
Resolution: --- → FIXED
if some other object (the space mgr) computed mCount to be more than twice the
size of the current count, we immediately bump up the size to that count.  If
more are needed later, the next call will give us twice this number anyway.
Status: RESOLVED → VERIFIED
With the latest build (200010308), the crash is not occuring when loading this
url.
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: