Closed Bug 17958 Opened 25 years ago Closed 25 years ago

Crash or hang on display of some HTML 4 character entities

Categories

(Core :: Layout, defect, P3)

x86
Windows NT
defect

Tracking

()

VERIFIED WORKSFORME

People

(Reporter: sidr, Assigned: buster)

References

Details

Attachments

(15 files)

16.28 KB, text/html
Details
644 bytes, text/html
Details
8.61 KB, text/html
Details
1.54 KB, text/html
Details
1.50 KB, text/html
Details
2.65 KB, text/html
Details
7.30 KB, text/html
Details
1.78 KB, text/html
Details
608 bytes, text/html
Details
1.21 KB, text/html
Details
1.05 KB, text/html
Details
1.41 KB, text/html
Details
787 bytes, text/html
Details
3.92 KB, text/html
Details
3.18 KB, text/html
Details
Attempting to view some HTML 4.0 character entities (Misc. Technical) causes the browser to crash. Additionally, attempting to view a list of all ISO 8859-1 character entities causes the browser to hang ( ~100% CPU, nonresponsive ). This latter problem did not exist in M10 and as late as the 1999-10-25-09-M11 Windows NT nightly binary (possibly later). The remainder of this report will follow as soon as the testcase attachments are in place. These testcases are adapted from the Character Entity DTDs <URL:http://www.w3.org/TR/REC-html40/sgml/entities.html> that are part of the HTML 4.0 spec. Each testcase is a single table showing one subsection from one of the three character entity DTDs. Each line in the tables has three cells, showing the named form of an entity, the numeric form of an entity, and the DTD-fragment that defines that entity.
For manageability, the last attachment provides "Live links to all character entity testcase attachments." Steps to Reproduce: 1. View the "ISO 8859-1 character entities testcase." 2. Use Task Manager to end the Mozilla task. Restart Mozilla. 3. View the "Miscellaneous Technical character entities testcase." Actual Results: In step 1, the browser hangs, unsing close to 100% CPU and not responding to the user of the MS-Windows. In step 3, the browser crashes before the testcase is displayed. Expected Results: The testcases all display. Tested With: Windows NT 4.0sp3, mozilla.exe, 1999-11-03-13-M11 nightly binary. Version 2.75 of the Times New Roman font was installed (downloaded from the Microsoft TrueType core fonts for the Web site, <URL:http://www.microsoft.com/typography/fontpack/default.htm>) Works correctly with: Netscape Navigator 4.7 on NT and Internet Explorer 5 on NT Both display all of the testcases, showing all the holes in their HTML 4.0 character entities support. Additional Information: The "ISO 8859-1 character entities testcase" displayed properly with M10 and with nightly binaries at least as late as 1999-10-25-09-M11 on NT. The "More General Punctuation character entities testcase" crashed the 1999-10-25-09-M11 nightly binary on Windows NT.
Blocks: 17962
The culprits in the "Miscellaneous Technical" testcase appear to be &lang; and &rang; - the left and right angle characters. Here is a DTD snippet: <!ENTITY lang CDATA "&#9001;" -- left-pointing angle bracket = bra, U+2329 ISOtech --> <!-- lang is NOT the same character as U+003C 'less than or U+2039 'single left-pointing angle quotation mark' --> <!ENTITY rang CDATA "&#9002;" -- right-pointing angle bracket = ket, U+232A ISOtech --> <!-- rang is NOT the same character as U+003E 'greater than' or U+203A 'single right-pointing angle quotation mark' --> ... almost certainly, however, the proper glyphs to use will be the same as those for &lt; and &gt; repectively - at least as a fallback position if &#9001; and &#9002; are not available in the character set already in use.
Assignee: ftang → kipp
When I try to load the "ISO 8859-1 character entities testcase." page I got an assertion first nsDebug::Assertion(char * 0x01ae00e0, char * 0x01ae00c0, char * 0x01ae008c, int 0x00000e0f) line 280 + 13 bytes nsBlockFrame::DoReflowInlineFrames(nsBlockReflowState & {...}, nsLineLayout & {...}, nsLineBox * 0x02114280, int * 0x0012cd54, unsigned char * 0x0012cbf4) line 3599 + 38 bytes nsBlockFrame::DoReflowInlineFramesAuto(nsBlockReflowState & {...}, nsLineBox * 0x02114280, int * 0x0012cd54, unsigned char * 0x0012cbf4) line 3487 + 34 bytes nsBlockFrame::ReflowInlineFrames(nsBlockReflowState & {...}, nsLineBox * 0x02114280, int * 0x0012cd54) line 3435 + 24 bytes nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineBox * 0x02114280, int * 0x0012cd54, int 0x00000000) line 2662 + 20 bytes nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}) line 2422 + 27 bytes nsBlockFrame::Reflow(nsBlockFrame * const 0x021141b0, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 1486 + 15 bytes nsContainerFrame::ReflowChild(nsIFrame * 0x021141b0, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 367 + 31 bytes nsTableCellFrame::Reflow(nsTableCellFrame * const 0x02114120, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 650 nsContainerFrame::ReflowChild(nsIFrame * 0x02114120, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 367 + 31 bytes nsTableRowFrame::InitialReflow(nsTableRowFrame * const 0x02198460, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, RowReflowState & {...}, unsigned int & 0x00000000, nsTableCellFrame * 0x00000000, int 0x00000001) line 1036 + 34 bytes nsTableRowFrame::Reflow(nsTableRowFrame * const 0x02198460, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 1428 + 35 bytes nsContainerFrame::ReflowChild(nsIFrame * 0x02198460, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 367 + 31 bytes nsTableRowGroupFrame::ReflowMappedChildren(nsTableRowGroupFrame * const 0x02055f90, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, RowGroupReflowState & {...}, unsigned int & 0x00000000, nsTableRowFrame * 0x00000000, nsReflowReason eReflowReason_Incremental, int 0x00000001, int 0x00000001) line 456 + 34 bytes nsTableRowGroupFrame::IR_TargetIsMe(nsTableRowGroupFrame * const 0x02055f90, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, RowGroupReflowState & {...}, unsigned int & 0x00000000) line 1315 + 41 bytes nsTableRowGroupFrame::IncrementalReflow(nsTableRowGroupFrame * const 0x02055f90, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, RowGroupReflowState & {...}, unsigned int & 0x00000000) line 1106 + 31 bytes nsTableRowGroupFrame::Reflow(nsTableRowGroupFrame * const 0x02055f90, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 1022 + 31 bytes nsContainerFrame::ReflowChild(nsIFrame * 0x02055f90, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 367 + 31 bytes nsTableFrame::IR_TargetIsChild(nsTableFrame * const 0x020558f0, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, InnerTableReflowState & {...}, unsigned int & 0x00000000, nsIFrame * 0x02055f90) line 2349 + 34 bytes nsTableFrame::IncrementalReflow(nsTableFrame * const 0x020558f0, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 2181 + 41 bytes nsTableFrame::Reflow(nsTableFrame * const 0x020558f0, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 1222 + 31 bytes nsContainerFrame::ReflowChild(nsIFrame * 0x020558f0, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 367 + 31 bytes nsTableOuterFrame::IR_InnerTableReflow(nsTableOuterFrame * const 0x02055870, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, OuterTableReflowState & {...}, unsigned int & 0x00000000) line 578 + 34 bytes nsTableOuterFrame::IR_TargetIsInnerTableFrame(nsTableOuterFrame * const 0x02055870, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, OuterTableReflowState & {...}, unsigned int & 0x00000000) line 373 + 31 bytes nsTableOuterFrame::IR_TargetIsChild(nsTableOuterFrame * const 0x02055870, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, OuterTableReflowState & {...}, unsigned int & 0x00000000, nsIFrame * 0x020558f0) line 346 + 31 bytes nsTableOuterFrame::IncrementalReflow(nsTableOuterFrame * const 0x02055870, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, OuterTableReflowState & {...}, unsigned int & 0x00000000) line 329 + 35 bytes nsTableOuterFrame::Reflow(nsTableOuterFrame * const 0x02055870, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 850 + 31 bytes nsBlockReflowContext::ReflowBlock(nsIFrame * 0x02055870, const nsRect & {...}, int 0x00000000, int 0x00000000, int 0x00000001, nsMargin & {...}, unsigned int & 0x00000000) line 248 + 45 bytes nsBlockFrame::ReflowBlockFrame(nsBlockReflowState & {...}, nsLineBox * 0x0207eb80, int * 0x0012e714) line 3223 + 59 bytes nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineBox * 0x0207eb80, int * 0x0012e714, int 0x00000001) line 2611 + 20 bytes nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}) line 2422 + 27 bytes nsBlockFrame::Reflow(nsBlockFrame * const 0x02054390, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 1486 + 15 bytes nsBlockReflowContext::ReflowBlock(nsIFrame * 0x02054390, const nsRect & {...}, int 0x00000001, int 0x00000000, int 0x00000001, nsMargin & {...}, unsigned int & 0x00000000) line 248 + 45 bytes nsBlockFrame::ReflowBlockFrame(nsBlockReflowState & {...}, nsLineBox * 0x0207eec0, int * 0x0012efa0) line 3223 + 59 bytes nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineBox * 0x0207eec0, int * 0x0012efa0, int 0x00000001) line 2611 + 20 bytes nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}) line 2422 + 27 bytes nsBlockFrame::Reflow(nsBlockFrame * const 0x02053870, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 1486 + 15 bytes nsAreaFrame::Reflow(nsAreaFrame * const 0x02053870, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 285 + 25 bytes nsContainerFrame::ReflowChild(nsIFrame * 0x02053870, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 367 + 31 bytes RootFrame::Reflow(RootFrame * const 0x020c5ef0, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 328 nsContainerFrame::ReflowChild(nsIFrame * 0x020c5ef0, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 367 + 31 bytes nsScrollFrame::Reflow(nsScrollFrame * const 0x020c5520, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 617 nsContainerFrame::ReflowChild(nsIFrame * 0x020c5520, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 367 + 31 bytes ViewportFrame::Reflow(ViewportFrame * const 0x020c5d90, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0x00000000) line 510 nsHTMLReflowCommand::Dispatch(nsHTMLReflowCommand * const 0x02119ec0, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsSize & {...}, nsIRenderingContext & {...}) line 136 PresShell::ProcessReflowCommands(PresShell * const 0x02043eb0) line 1456 PresShell::ExitReflowLock(PresShell * const 0x02043eb0) line 675 PresShell::ContentAppended(PresShell * const 0x02043eb8, nsIDocument * 0x0210e940, nsIContent * 0x020cdf2c, int 0x00000007) line 1893 nsDocument::ContentAppended(nsDocument * const 0x0210e940, nsIContent * 0x020cdf2c, int 0x00000007) line 1510 nsHTMLDocument::ContentAppended(nsHTMLDocument * const 0x0210e940, nsIContent * 0x020cdf2c, int 0x00000007) line 994 HTMLContentSink::NotifyAppend(nsIContent * 0x020cdf2c, int 0x00000007) line 3474 SinkContext::FlushTags() line 1726 HTMLContentSink::WillInterrupt(HTMLContentSink * const 0x02110c00) line 2050 CNavDTD::WillInterruptParse(CNavDTD * const 0x020443f0) line 3144 + 27 bytes nsParser::ResumeParse(nsIDTD * 0x00000000, int 0x00000000) line 1003 nsParser::OnDataAvailable(nsParser * const 0x011e5c6c, nsIChannel * 0x02112d30, nsISupports * 0x00000000, nsIInputStream * 0x0204b628, unsigned int 0x00000000, unsigned int 0x00000ab4) line 1335 + 19 bytes nsDocumentBindInfo::OnDataAvailable(nsDocumentBindInfo * const 0x02112ba0, nsIChannel * 0x02112d30, nsISupports * 0x00000000, nsIInputStream * 0x0204b628, unsigned int 0x00000000, unsigned int 0x00000ab4) line 1216 + 32 bytes nsChannelListener::OnDataAvailable(nsChannelListener * const 0x021a01d0, nsIChannel * 0x02112d30, nsISupports * 0x00000000, nsIInputStream * 0x0204b628, unsigned int 0x00000000, unsigned int 0x00000ab4) line 1402 nsHTTPResponseListener::OnDataAvailable(nsHTTPResponseListener * const 0x0204b5c0, nsIChannel * 0x0210b1f0, nsISupports * 0x02112d30, nsIInputStream * 0x0204b628, unsigned int 0x000005b4, unsigned int 0x00000ab4) line 171 + 47 bytes nsOnDataAvailableEvent::HandleEvent(nsOnDataAvailableEvent * const 0x020fcf30) line 413 nsStreamListenerEvent::HandlePLEvent(PLEvent * 0x020fcf80) line 169 + 12 bytes PL_HandleEvent(PLEvent * 0x020fcf80) line 537 + 10 bytes PL_ProcessPendingEvents(PLEventQueue * 0x00cb5fb0) line 498 + 9 bytes _md_EventReceiverProc(void * 0x023e0260, unsigned int 0x0000c0e1, unsigned int 0x00000000, long 0x00cb5fb0) line 972 + 9 bytes USER32! 77e5111a() it assert at nsBlockFrame::DoReflowInlineFrames NS_ASSERTION(aState.IsImpactedByFloater(), "redo line on totally empty line"); Reassign to kipp. Since he is the last one touch that assert line from cvsblame.
I cannot reproduce the crash he report. I think kipp should try to reprduce the assert , and probably can get a hint for the hang. Add erik/bobj/msanz to the cc.
Assignee: kipp → ftang
Updating to default International Assignee...kipp no longer with us :-(
Assignee: kipp → ftang
ftang, you need to find a new owner; kipp doesn't work here anymore
Assignee: ftang → troy
troy- can you handle this ?
Assignee: troy → kipp
No crashes or hangs on Win NT or 98 with today's nightly binary displaying any of the testcases (which together test all of the HTML 4.0 entities). This bug is really waiting for testing on other platforms to confirm that it is fixed... sorry, can't test Mac, Linux, or other-nixes here. Tested with: 1999-12-14-08-M12 nightly binary on Windows NT 4.0sp3 1999-12-14-08-M12 nightly binary on Windows 98 SE
Assignee: kipp → buster
marking WORKSFORME based on my testing and comments by sidr@albedo.net. QA to verify on all platforms.
Status: NEW → RESOLVED
Closed: 25 years ago
Resolution: --- → WORKSFORME
see previous comment, works fine on 12/20/99 build on window nt.
Status: RESOLVED → VERIFIED
I verified this in 122011 M12 Win32 build.
I an not at all sure about verifying this as wfm without testing it on Mac and at least one *NIX. During Beta, this could result in any number of uninformative "my page crashed the browser, bad browser, bad" bug reports if it exists on any platform ... this is fundamental HTML 4. Even those who might try to boil down their pages to a testcase are unlikely to continue until only a single character reference or two remains, and that's all it takes to trigger this bug in an affected build. Once through the testcases above on non-Win32 platforms will show whether or not this needs to be reopened.
Teruko, Per last comment, will you have this verified on Mac and Linux too? Thx.
No crash or hang on any of the testcases with 2000.02.02.09 Linux build running on RH 6.0.
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: