⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 89831 in webkit


Ignore:
Timestamp:
Jun 27, 2011, 10:21:39 AM (15 years ago)
Author:
rniwa@webkit.org
Message:

2011-06-27 Ryosuke Niwa <rniwa@webkit.org>

Reviewed by Kent Tamura.

Crash in TextIterator
https://bugs.webkit.org/show_bug.cgi?id=63334

Fix a crash in TextIterator. Keep m_sortedTextBoxes and renderer consistent
and check !m_offset when handling first letter.

Also add more assertions to help detecting similar bugs.

Test: editing/text-iterator/first-letter-rtl-crash.html

  • editing/TextIterator.cpp: (WebCore::TextIterator::handleTextNode): (WebCore::TextIterator::emitText):

2011-06-27 Ryosuke Niwa <rniwa@webkit.org>

Reviewed by Kent Tamura.

Crash in TextIterator
https://bugs.webkit.org/show_bug.cgi?id=63334

Added a test to ensure WebKit does not crash when iterating through letters in a RTL block
with first-letter rule applied where letters are not contiguous.

  • editing/text-iterator/first-letter-rtl-crash-expected.txt: Added.
  • editing/text-iterator/first-letter-rtl-crash.html: Added.
Location:
trunk
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r89829 r89831  
     12011-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
    1142011-06-27  Balazs Kelemen  <kbalazs@webkit.org>
    215
  • trunk/Source/WebCore/ChangeLog

    r89830 r89831  
     12011-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
    1192011-06-27  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>
    220
  • trunk/Source/WebCore/editing/TextIterator.cpp

    r89181 r89831  
    460460            return false;
    461461        }
    462         if (!m_handledFirstLetter && renderer->isTextFragment()) {
     462        if (!m_handledFirstLetter && renderer->isTextFragment() && !m_offset) {
    463463            handleTextNodeFirstLetter(static_cast<RenderTextFragment*>(renderer));
    464464            if (m_firstLetterText) {
     
    497497    }
    498498
     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
    499507    // Used when text boxes are out of order (Hebrew/Arabic w/ embeded LTR text)
    500508    if (renderer->containsReversedText()) {
     
    505513        std::sort(m_sortedTextBoxes.begin(), m_sortedTextBoxes.end(), InlineTextBox::compareByStart);
    506514        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
    512518    handleTextBox();
    513519    return true;
     
    976982    m_text = m_emitsTextWithoutTranscoding ? renderer->textWithoutTranscoding() : renderer->text();
    977983    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);
    978987
    979988    m_positionNode = textNode;
Note: See TracChangeset for help on using the changeset viewer.