Closed Bug 12958 Opened 25 years ago Closed 25 years ago

[CRASH]select text with first-letter behaves oddly

Categories

(Core :: Layout, defect, P3)

x86
Windows NT
defect

Tracking

()

VERIFIED FIXED

People

(Reporter: buster, Assigned: mjudge)

References

()

Details

open sample 0 in viewer turn on edit mode go to the line that has first-letter style, "First letter style is really..." select all but the first 2 characters delete delete the second character ('i') assert (usually *). continue through the assert. crash. * if you don't assert deleting 'i', then delete 'F' after deleting 'i'. This always works. stack: nsDebug::Assertion(const char * 0x0242b974, const char * 0x0242b96c, const char * 0x0242b934, int 512) line 176 + 13 bytes nsContainerFrame::DeleteChildsNextInFlow(nsIPresContext & {...}, nsIFrame * 0x027ded40) line 512 + 32 bytes nsFirstLetterFrame::Reflow(nsFirstLetterFrame * const 0x027de894, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 240 nsBlockReflowContext::ReflowBlock(nsIFrame * 0x027de890, const nsRect & {...}, int 1, int 0, int 1, nsMargin & {...}, unsigned int & 0) line 224 + 42 bytes nsBlockFrame::ReflowFloater(nsBlockReflowState & {...}, nsPlaceholderFrame * 0x027de420, nsRect & {...}, nsMargin & {...}, nsMargin & {...}) line 4637 + 41 bytes nsBlockReflowState::AddFloater(nsLineLayout & {...}, nsPlaceholderFrame * 0x027de420, int 0) line 4704 nsLineLayout::AddFloater(nsPlaceholderFrame * 0x027de420) line 438 nsLineLayout::ReflowFrame(nsIFrame * 0x027de420, nsIFrame * * 0x0012e248, unsigned int & 0) line 868 nsBlockFrame::ReflowInlineFrame(nsBlockReflowState & {...}, nsLineLayout & {...}, nsLineBox * 0x027dfe60, nsIFrame * 0x027de420, unsigned char * 0x0012d904) line 3180 + 23 bytes nsBlockFrame::DoReflowInlineFrames(nsBlockReflowState & {...}, nsLineLayout & {...}, nsLineBox * 0x027dfe60, int * 0x0012e150, unsigned char * 0x0012e038) line 3070 + 28 bytes nsBlockFrame::DoReflowInlineFramesAuto(nsBlockReflowState & {...}, nsLineBox * 0x027dfe60, int * 0x0012e150, unsigned char * 0x0012e038) line 3015 + 34 bytes nsBlockFrame::ReflowInlineFrames(nsBlockReflowState & {...}, nsLineBox * 0x027dfe60, int * 0x0012e150) line 2963 + 24 bytes nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineBox * 0x027dfe60, int * 0x0012e150, int 1) line 2257 + 20 bytes nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}) line 2000 + 30 bytes nsBlockFrame::Reflow(nsBlockFrame * const 0x027dedc4, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 1306 + 18 bytes nsBlockReflowContext::ReflowBlock(nsIFrame * 0x027dedc0, const nsRect & {...}, int 1, int 240, int 0, nsMargin & {...}, unsigned int & 0) line 224 + 42 bytes nsBlockFrame::ReflowBlockFrame(nsBlockReflowState & {...}, nsLineBox * 0x027f5bc0, int * 0x0012e6cc) line 2774 + 56 bytes nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineBox * 0x027f5bc0, int * 0x0012e6cc, int 1) line 2208 + 20 bytes nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}) line 2000 + 30 bytes nsBlockFrame::Reflow(nsBlockFrame * const 0x02793454, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 1306 + 18 bytes nsBlockReflowContext::ReflowBlock(nsIFrame * 0x02793450, const nsRect & {...}, int 1, int 0, int 1, nsMargin & {...}, unsigned int & 0) line 224 + 42 bytes nsBlockFrame::ReflowBlockFrame(nsBlockReflowState & {...}, nsLineBox * 0x027931e0, int * 0x0012ec48) line 2774 + 56 bytes nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineBox * 0x027931e0, int * 0x0012ec48, int 1) line 2208 + 20 bytes nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}) line 2000 + 30 bytes nsBlockFrame::Reflow(nsBlockFrame * const 0x02793a74, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 1306 + 18 bytes nsAreaFrame::Reflow(nsAreaFrame * const 0x02793a74, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 344 + 25 bytes nsContainerFrame::ReflowChild(nsIFrame * 0x02793a70, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 439 + 28 bytes RootFrame::Reflow(RootFrame * const 0x027920d4, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 330 nsContainerFrame::ReflowChild(nsIFrame * 0x027920d0, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 439 + 28 bytes nsScrollFrame::Reflow(nsScrollFrame * const 0x02791154, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 606 nsContainerFrame::ReflowChild(nsIFrame * 0x02791150, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 439 + 28 bytes ViewportFrame::Reflow(ViewportFrame * const 0x025c77a4, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 516 nsHTMLReflowCommand::Dispatch(nsHTMLReflowCommand * const 0x0295b6c0, nsIPresContext & {...}, nsHTMLReflowMetrics & {...}, const nsSize & {...}, nsIRenderingContext & {...}) line 140 PresShell::ProcessReflowCommands(PresShell * const 0x025bfb80) line 1229 PresShell::ExitReflowLock(PresShell * const 0x025bfb80) line 581 PresShell::ContentChanged(PresShell * const 0x025bfb88, nsIDocument * 0x0250dc70, nsIContent * 0x027ba40c, nsISupports * 0x00000000) line 1603 nsDocument::ContentChanged(nsDocument * const 0x0250dc70, nsIContent * 0x027ba40c, nsISupports * 0x00000000) line 1540 nsGenericDOMDataNode::SetText(const unsigned short * 0x0295b720, int 3, int 1) line 927 nsTextNode::SetText(nsTextNode * const 0x027ba410, const unsigned short * 0x0295b720, int 3, int 1) line 66 + 26 bytes nsGenericDOMDataNode::ReplaceData(unsigned int 3, unsigned int 1, const nsString & {...}) line 377 + 33 bytes nsGenericDOMDataNode::DeleteData(unsigned int 3, unsigned int 1) line 326 + 20 bytes nsTextNode::DeleteData(nsTextNode * const 0x027ba400, unsigned int 3, unsigned int 1) line 51 + 22 bytes DeleteTextTxn::Do(DeleteTextTxn * const 0x0295b810) line 67 + 40 bytes EditAggregateTxn::Do(EditAggregateTxn * const 0x0295a8c0) line 56 + 12 bytes nsTransactionItem::Do() line 102 + 18 bytes nsTransactionManager::BeginTransaction(nsITransaction * 0x0295a8c0) line 1038 + 11 bytes nsTransactionManager::Do(nsTransactionManager * const 0x0280c830, nsITransaction * 0x0295a8c0) line 134 + 18 bytes nsEditor::Do(nsEditor * const 0x0280a5c0, nsITransaction * 0x0295a8c0) line 341 + 30 bytes nsEditor::DeleteSelectionImpl(nsEditor * const 0x0280a5c0, nsIEditor::ESelectionCollapseDirection eDeletePrevious) line 3807 + 16 bytes nsHTMLEditor::DeleteSelection(nsHTMLEditor * const 0x0280a5c0, nsIEditor::ESelectionCollapseDirection eDeletePrevious) line 835 + 19 bytes nsHTMLEditorLog::DeleteSelection(nsHTMLEditorLog * const 0x0280a5c0, nsIEditor::ESelectionCollapseDirection eDeletePrevious) line 155 + 13 bytes nsTextEditorKeyListener::KeyPress(nsIDOMEvent * 0x0295a9d0) line 273 nsEventListenerManager::HandleEvent(nsIPresContext & {...}, nsEvent * 0x0012fcb8, nsIDOMEvent * * 0x0012fa40, unsigned int 3, nsEventStatus & nsEventStatus_eIgnore) line 763 + 17 bytes nsDocument::HandleDOMEvent(nsDocument * const 0x0250dc70, nsIPresContext & {...}, nsEvent * 0x0012fcb8, nsIDOMEvent * * 0x0012fa40, unsigned int 1, nsEventStatus & nsEventStatus_eIgnore) line 2316 nsHTMLHtmlElement::HandleDOMEvent(nsHTMLHtmlElement * const 0x0251c88c, nsIPresContext & {...}, nsEvent * 0x0012fcb8, nsIDOMEvent * * 0x00000000, unsigned int 1, nsEventStatus & nsEventStatus_eIgnore) line 186 + 41 bytes
Status: NEW → ASSIGNED
Target Milestone: M12
*** Bug 16072 has been marked as a duplicate of this bug. ***
Assignee: kipp → mjudge
Status: ASSIGNED → NEW
Summary: delete text with first letter crashes → select text with first-letter behaves oddly
Finally, fixed. I reworked the frame construction code to properly tear down and then reconstruct first-letter frames when editing is occuring. The test no longer crashes. However, selection in first-letter situations is now (sigh) horribly broken... so I'm reassigning to mjudge to deal with that new issue. In the old code the content object for the first-letter frame was the block. I thought that this was necessary to get the style right; I was wrong. So now the letter frame has the proper content object (in both in-flow and floating situations). For some reason this change has broken the selection logic. Attempting to select the sect that is a continuation of the letter-frame's character doesn't work (well it doesn't display properly, but the selection ends up in the right place in the content - go figure).
QA Contact: petersen → sujay
Summary: select text with first-letter behaves oddly → [CRASH]select text with first-letter behaves oddly
changing QA contact to Sujay, since this is an editor issue, adding [CRASH] to summary. Sujay -- can you give this a try and see if it still crashes?
sample 0 doesn't come up in mozilla....
Blocks: 18471
Status: NEW → ASSIGNED
this is fixed. tadaa
If fixed is checked in, could you please mark Resolved/Fixed? Thanks!
Status: ASSIGNED → RESOLVED
Closed: 25 years ago
Resolution: --- → FIXED
Status: RESOLVED → VERIFIED
yes, it is fixed and I verified the fix using 1999111108 build on win95, marking verified.
Blocks: 18951
No longer blocks: 18471
No longer blocks: 18951
You need to log in before you can comment on or make changes to this bug.