Bug 14533 - Webkit hangs indefinitely when pasting large text into text field
Summary: Webkit hangs indefinitely when pasting large text into text field
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: HTML Editing (show other bugs)
Version: 523.x (Safari 3)
Hardware: Mac OS X 10.4
: P1 Normal
Assignee: Nobody
URL: http://www.battle.net/forums/board.as...
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2007-07-05 14:12 PDT by Adam Williams
Modified: 2007-11-01 16:11 PDT (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Adam Williams 2007-07-05 14:12:42 PDT
If you attempt to paste a LOT of text, (such as a system profiler report saved in RTF) into a text field on battle.net forums. Safari just goes into an endless beachball.

Here is a sample from beachball.

Analysis of sampling pid 330 every 10.000000 milliseconds
Call graph:
    95 Thread_0f07
      95 0x4f1b0
        95 0x246c
          95 NSApplicationMain
            95 -[NSApplication run]
              95 0x16444
                95 -[NSApplication sendEvent:]
                  95 -[NSApplication _handleKeyEquivalent:]
                    95 -[NSMenu performKeyEquivalent:]
                      95 -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:]
                        95 -[NSMenu performActionForItemAtIndex:]
                          95 0x1a020
                            95 -[NSApplication sendAction:to:from:]
                              95 WebCore::Editor::pasteAsPlainTextWithPasteboard(WebCore::Pasteboard*)
                                95 WebCore::Editor::replaceSelectionWithText(WebCore::String const&, bool, bool)
                                  95 WebCore::Editor::replaceSelectionWithFragment(WTF::PassRefPtr<WebCore::DocumentFragment>, bool, bool, bool)
                                    95 WebCore::applyCommand(WTF::PassRefPtr<WebCore::EditCommand>)
                                      95 WebCore::EditCommand::apply()
                                        95 WebCore::ReplaceSelectionCommand::doApply()
                                          95 WebCore::ReplaceSelectionCommand::completeHTMLReplacement(WebCore::Position const&)
                                            95 WebCore::CompositeEditCommand::applyStyle(WebCore::CSSStyleDeclaration*, WebCore::Position const&, WebCore::Position const&, WebCore::EditAction)
                                              95 WebCore::CompositeEditCommand::applyCommandToComposite(WTF::PassRefPtr<WebCore::EditCommand>)
                                                95 WebCore::EditCommand::apply()
                                                  95 WebCore::ApplyStyleCommand::doApply()
                                                    95 WebCore::ApplyStyleCommand::applyBlockStyle(WebCore::CSSMutableStyleDeclaration*)
                                                      50 WebCore::VisiblePosition::next(bool) const
                                                        32 WebCore::nextVisuallyDistinctCandidate(WebCore::Position const&)
                                                          23 WebCore::Position::downstream() const
                                                            23 WebCore::Position::downstream() const
                                                          9 WebCore::Position::isCandidate() const
                                                            9 WebCore::Position::inRenderedText() const
                                                              9 WebCore::Position::inRenderedText() const
                                                        18 WebCore::VisiblePosition::init(WebCore::Position const&, WebCore::EAffinity)
                                                          18 WebCore::VisiblePosition::canonicalPosition(WebCore::Position const&)
                                                            10 WebCore::Position::upstream() const
                                                              10 WebCore::Position::upstream() const
                                                            8 WebCore::Position::isCandidate() const
                                                              8 WebCore::Position::inRenderedText() const
                                                                4 WebCore::InlineTextBox::containsCaretOffset(int) const
                                                                  4 WebCore::InlineTextBox::containsCaretOffset(int) const
                                                                4 WebCore::Position::inRenderedText() const
                                                      29 WebCore::endOfParagraph(WebCore::VisiblePosition const&)
                                                        17 WebCore::VisiblePosition::VisiblePosition[in-charge](WebCore::Node*, int, WebCore::EAffinity)
                                                          17 WebCore::VisiblePosition::init(WebCore::Position const&, WebCore::EAffinity)
                                                            17 WebCore::VisiblePosition::canonicalPosition(WebCore::Position const&)
                                                              9 WebCore::Position::upstream() const
                                                                9 WebCore::Position::upstream() const
                                                              8 WebCore::Position::isCandidate() const
                                                                7 WebCore::Position::inRenderedText() const
                                                                  5 WebCore::InlineTextBox::containsCaretOffset(int) const
                                                                    5 WebCore::InlineTextBox::containsCaretOffset(int) const
                                                                  2 WebCore::Position::inRenderedText() const
                                                                1 WebCore::RenderText::nextOffset(int) const
                                                                  1 WebCore::RenderText::nextOffset(int) const
                                                        12 WebCore::RenderText::caretMaxRenderedOffset() const
                                                          12 WebCore::RenderText::caretMaxRenderedOffset() const
                                                      14 WebCore::Position::downstream() const
                                                        14 WebCore::Position::downstream() const
                                                      2 WebCore::StyleChange::StyleChange[in-charge](WebCore::CSSStyleDeclaration*, WebCore::Position const&, WebCore::StyleChange::ELegacyHTMLStyles)
                                                        1 WebCore::StyleChange::StyleChange[in-charge](WebCore::CSSStyleDeclaration*, WebCore::Position const&, WebCore::StyleChange::ELegacyHTMLStyles)
                                                        1 WebCore::StyleChange::init(WTF::PassRefPtr<WebCore::CSSStyleDeclaration>, WebCore::Position const&)
                                                          1 WebCore::StyleChange::currentlyHasStyle(WebCore::Position const&, WebCore::CSSProperty const*)
                                                            1 WebCore::CSSPrimitiveValue::cssText() const
                                                              1 WebCore::String::number(double)
                                                                1 WebCore::String::format(char const*, ...)
                                                                  1 vsnprintf$LDBL128
                                                                    1 __vfprintf$LDBL128
                                                                      1 __vfprintf$LDBL128
    95 Thread_1003
      95 _pthread_body
        95 forkThreadForFunction
          95 -[AsyncDB _run:]
            95 -[NSConditionLock lockWhenCondition:]
              95 pthread_cond_wait
                95 semaphore_wait_signal_trap
                  95 semaphore_wait_signal_trap
    95 Thread_1103
      95 _pthread_body
        95 forkThreadForFunction
          95 +[NSURLConnection(NSURLConnectionInternal) _resourceLoadLoop:]
            95 CFRunLoopRunSpecific
              95 __CFRunLoopRun
                95 mach_msg
                  95 mach_msg_trap
                    95 mach_msg_trap
    95 Thread_1203
      95 _pthread_body
        95 forkThreadForFunction
          95 +[NSURLCache _diskCacheSyncLoop:]
            95 CFRunLoopRunSpecific
              95 __CFRunLoopRun
                95 mach_msg
                  95 mach_msg_trap
                    95 mach_msg_trap
    95 Thread_1303
      95 _pthread_body
        95 __CFSocketManager
          95 select
            95 select
    95 Thread_1403
      95 _pthread_body
        95 native_ShockwaveFlash_TCallFrame
          95 mach_msg
            95 mach_msg_trap
              95 mach_msg_trap

Total number in stack (recursive counted multiple, when >=5):
        5       _pthread_body

Sort by top of stack, same collapsed (when >= 5):
        mach_msg_trap        285
        select        95
        semaphore_wait_signal_trap        95
        WebCore::Position::downstream() const        37
        WebCore::Position::upstream() const        19
        WebCore::Position::inRenderedText() const        15
        WebCore::RenderText::caretMaxRenderedOffset() const        12
        WebCore::InlineTextBox::containsCaretOffset(int) const        9
Sample analysis of process 330 written to file /dev/stdout
Sampling process 330 each 10 msecs 100 times
Comment 1 Mark Rowe (bdash) 2007-07-06 10:33:07 PDT
It only hangs for about 30 seconds on my machine, but that is clearly a lot longer than one would expect.
Comment 2 Mark Rowe (bdash) 2007-07-06 10:33:41 PDT
<rdar://problem/5317143>
Comment 3 Justin Garcia 2007-07-06 10:57:50 PDT
Dupe of <rdar://problem/5195056>
Comment 4 Justin Garcia 2007-11-01 16:11:23 PDT
r27369