Changeset 63579 in webkit


Ignore:
Timestamp:
Jul 16, 2010 2:01:01 PM (14 years ago)
Author:
mitz@apple.com
Message:

<rdar://problem/7527532> Crash beneath setSelection() during detach()
https://bugs.webkit.org/show_bug.cgi?id=42020

Reviewed by Simon Fraser.

No test because I am unable to reproduce the crash.

  • rendering/RenderView.cpp:

(WebCore::RenderView::setSelection): In the clearSelection() case, where the repaint mode is
RepaintNewMinusOld, avoid making RenderBlockSelectionInfo instances, and thereby avoid calling
localToAbsolute() during detach().

Location:
trunk/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r63578 r63579  
     12010-07-16  Dan Bernstein  <mitz@apple.com>
     2
     3        Reviewed by Simon Fraser.
     4
     5        <rdar://problem/7527532> Crash beneath setSelection() during detach()
     6        https://bugs.webkit.org/show_bug.cgi?id=42020
     7
     8        No test because I am unable to reproduce the crash.
     9
     10        * rendering/RenderView.cpp:
     11        (WebCore::RenderView::setSelection): In the clearSelection() case, where the repaint mode is
     12        RepaintNewMinusOld, avoid making RenderBlockSelectionInfo instances, and thereby avoid calling
     13        localToAbsolute() during detach().
     14
    1152010-07-16  Anders Carlsson  <andersca@apple.com>
    216
  • trunk/WebCore/rendering/RenderView.cpp

    r62693 r63579  
    419419            // Blocks are responsible for painting line gaps and margin gaps.  They must be examined as well.
    420420            oldSelectedObjects.set(os, new RenderSelectionInfo(os, true));
    421             RenderBlock* cb = os->containingBlock();
    422             while (cb && !cb->isRenderView()) {
    423                 RenderBlockSelectionInfo* blockInfo = oldSelectedBlocks.get(cb);
    424                 if (blockInfo)
    425                     break;
    426                 oldSelectedBlocks.set(cb, new RenderBlockSelectionInfo(cb));
    427                 cb = cb->containingBlock();
     421            if (blockRepaintMode == RepaintNewXOROld) {
     422                RenderBlock* cb = os->containingBlock();
     423                while (cb && !cb->isRenderView()) {
     424                    RenderBlockSelectionInfo* blockInfo = oldSelectedBlocks.get(cb);
     425                    if (blockInfo)
     426                        break;
     427                    oldSelectedBlocks.set(cb, new RenderBlockSelectionInfo(cb));
     428                    cb = cb->containingBlock();
     429                }
    428430            }
    429431        }
     
    528530        RenderBlockSelectionInfo* oldInfo = i->second;
    529531        if (!newInfo || oldInfo->rects() != newInfo->rects() || oldInfo->state() != newInfo->state()) {
    530             if (blockRepaintMode == RepaintNewXOROld)
    531                 oldInfo->repaint();
     532            oldInfo->repaint();
    532533            if (newInfo) {
    533534                newInfo->repaint();
Note: See TracChangeset for help on using the changeset viewer.