Changeset 89831 in webkit
- Timestamp:
- Jun 27, 2011, 10:21:39 AM (15 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 3 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/editing/text-iterator/first-letter-rtl-crash-expected.txt (added)
-
LayoutTests/editing/text-iterator/first-letter-rtl-crash.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/editing/TextIterator.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r89829 r89831 1 2011-06-27 Ryosuke Niwa <rniwa@webkit.org> 2 3 Reviewed by Kent Tamura. 4 5 Crash in TextIterator 6 https://bugs.webkit.org/show_bug.cgi?id=63334 7 8 Added a test to ensure WebKit does not crash when iterating through letters in a RTL block 9 with first-letter rule applied where letters are not contiguous. 10 11 * editing/text-iterator/first-letter-rtl-crash-expected.txt: Added. 12 * editing/text-iterator/first-letter-rtl-crash.html: Added. 13 1 14 2011-06-27 Balazs Kelemen <kbalazs@webkit.org> 2 15 -
trunk/Source/WebCore/ChangeLog
r89830 r89831 1 2011-06-27 Ryosuke Niwa <rniwa@webkit.org> 2 3 Reviewed by Kent Tamura. 4 5 Crash in TextIterator 6 https://bugs.webkit.org/show_bug.cgi?id=63334 7 8 Fix a crash in TextIterator. Keep m_sortedTextBoxes and renderer consistent 9 and check !m_offset when handling first letter. 10 11 Also add more assertions to help detecting similar bugs. 12 13 Test: editing/text-iterator/first-letter-rtl-crash.html 14 15 * editing/TextIterator.cpp: 16 (WebCore::TextIterator::handleTextNode): 17 (WebCore::TextIterator::emitText): 18 1 19 2011-06-27 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org> 2 20 -
trunk/Source/WebCore/editing/TextIterator.cpp
r89181 r89831 460 460 return false; 461 461 } 462 if (!m_handledFirstLetter && renderer->isTextFragment() ) {462 if (!m_handledFirstLetter && renderer->isTextFragment() && !m_offset) { 463 463 handleTextNodeFirstLetter(static_cast<RenderTextFragment*>(renderer)); 464 464 if (m_firstLetterText) { … … 497 497 } 498 498 499 500 m_textBox = renderer->firstTextBox(); 501 if (!m_handledFirstLetter && renderer->isTextFragment() && !m_offset) 502 handleTextNodeFirstLetter(static_cast<RenderTextFragment*>(renderer)); 503 504 if (m_firstLetterText) 505 renderer = m_firstLetterText; 506 499 507 // Used when text boxes are out of order (Hebrew/Arabic w/ embeded LTR text) 500 508 if (renderer->containsReversedText()) { … … 505 513 std::sort(m_sortedTextBoxes.begin(), m_sortedTextBoxes.end(), InlineTextBox::compareByStart); 506 514 m_sortedTextBoxesPosition = 0; 507 } 508 509 m_textBox = renderer->containsReversedText() ? (m_sortedTextBoxes.isEmpty() ? 0 : m_sortedTextBoxes[0]) : renderer->firstTextBox(); 510 if (!m_handledFirstLetter && renderer->isTextFragment() && !m_offset) 511 handleTextNodeFirstLetter(static_cast<RenderTextFragment*>(renderer)); 515 m_textBox = m_sortedTextBoxes.isEmpty() ? 0 : m_sortedTextBoxes[0]; 516 } 517 512 518 handleTextBox(); 513 519 return true; … … 976 982 m_text = m_emitsTextWithoutTranscoding ? renderer->textWithoutTranscoding() : renderer->text(); 977 983 ASSERT(m_text.characters()); 984 ASSERT(0 <= textStartOffset && textStartOffset < static_cast<int>(m_text.length())); 985 ASSERT(0 <= textEndOffset && textEndOffset <= static_cast<int>(m_text.length())); 986 ASSERT(textStartOffset <= textEndOffset); 978 987 979 988 m_positionNode = textNode;
Note:
See TracChangeset
for help on using the changeset viewer.