Bug 70608 - konqueror stops responding while viewing specific url
Summary: konqueror stops responding while viewing specific url
Status: RESOLVED FIXED
Alias: None
Product: konqueror
Classification: Applications
Component: khtml renderer (show other bugs)
Version: unspecified
Platform: Gentoo Packages Linux
: NOR major
Target Milestone: ---
Assignee: Konqueror Developers
URL:
Keywords:
: 66452 (view as bug list)
Depends on:
Blocks:
 
Reported: 2003-12-16 16:10 UTC by Jarkko Haapalainen
Modified: 2004-01-13 14:39 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
testcase for hanging khtml (224 bytes, text/html)
2004-01-13 14:39 UTC, Andy Goossens
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Jarkko Haapalainen 2003-12-16 16:10:03 UTC
Version:            (using KDE KDE 3.1.94)
Installed from:    Gentoo Packages
Compiler:          gcc version 3.2.3 20030422 (Gentoo Linux 1.4 3.2.3-r3, propolice) 
OS:          Linux

Okay.. try going to this url with konqueror:
 http://kerneltrap.org/node/view/1630#4931

For me konqueror stops responding, I had tried it many times and rebooted my computer between attempts and always konqueror stops responding. With mozilla browser url is fine.

Can you confirm this? Or is it only with my setup..
Comment 1 Jo Øiongen 2003-12-19 14:58:19 UTC
The page works fine for me.

Cheers Jo
Comment 2 Jarkko Haapalainen 2003-12-19 16:19:56 UTC
This is strange.. I can produce it always. I just changed to kernel 2.6.0 and didn't help, obvious of course.. but can I debug this without compiling?
Comment 3 Thiago Macieira 2003-12-19 17:32:47 UTC
I can reproduce this. HEAD 20031217, on kernel 2.6.0 (if that matters), compiled on gcc 3.3.2

Attaching to konq after it is stuck, I get:
#0  khtml::RenderBlock::leftRelOffset(int, int, int*) const (this=0x84620e4, y=14,
    fixedOffset=0, heightRemaining=0xbfffd670)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:1442
#1  0x41ddac2f in khtml::RenderBlock::positionNewFloats() (this=0x84620e4)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:1374
#2  0x41dd57c0 in khtml::RenderBlock::layoutInlineChildren(bool) (this=0x84620e4,
    relayoutChildren=true)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/bidi.cpp:1221
#3  0x41dd82a7 in khtml::RenderBlock::layoutBlock(bool) (this=0x84620e4,
    relayoutChildren=true)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:498
#4  0x41dd8111 in khtml::RenderBlock::layout() (this=0x84620e4)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:418
#5  0x41dd9668 in khtml::RenderBlock::layoutBlockChildren(bool) (this=0x8453c30,
    relayoutChildren=true)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:822
#6  0x41dd8632 in khtml::RenderBlock::layoutBlock(bool) (this=0x8453c30,
    relayoutChildren=true)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:500
#7  0x41dd8111 in khtml::RenderBlock::layout() (this=0x8453c30)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:418
#8  0x41dd9668 in khtml::RenderBlock::layoutBlockChildren(bool) (this=0x8453bac,
    relayoutChildren=true)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:822
#9  0x41dd8632 in khtml::RenderBlock::layoutBlock(bool) (this=0x8453bac,
    relayoutChildren=true)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:500
#10 0x41dff27f in khtml::RenderTableCell::layout() (this=0x8453bac)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_table.cpp:1618
#11 0x41dfee3f in khtml::RenderTableRow::layout() (this=0x8453b88)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_table.cpp:1537
#12 0x41de9d78 in khtml::RenderContainer::layout() (this=0x8453840)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_container.cpp:347
#13 0x41dfa62c in khtml::RenderTable::layout() (this=0x84537a4)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_table.cpp:267
#14 0x41dd9668 in khtml::RenderBlock::layoutBlockChildren(bool) (this=0x8453720,
    relayoutChildren=true)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:822
#15 0x41dd8632 in khtml::RenderBlock::layoutBlock(bool) (this=0x8453720,
    relayoutChildren=true)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:500
#16 0x41dff27f in khtml::RenderTableCell::layout() (this=0x8453720)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_table.cpp:1618
#17 0x41dfee3f in khtml::RenderTableRow::layout() (this=0x84536fc)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_table.cpp:1537
#18 0x41de9d78 in khtml::RenderContainer::layout() (this=0x84536a0)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_container.cpp:347
#19 0x41dfa62c in khtml::RenderTable::layout() (this=0x8453604)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_table.cpp:267
#20 0x41dd9668 in khtml::RenderBlock::layoutBlockChildren(bool) (this=0x8453580,
    relayoutChildren=true)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:822
#21 0x41dd8632 in khtml::RenderBlock::layoutBlock(bool) (this=0x8453580,
    relayoutChildren=true)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:500
#22 0x41dff27f in khtml::RenderTableCell::layout() (this=0x8453580)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_table.cpp:1618
#23 0x41dfee3f in khtml::RenderTableRow::layout() (this=0x8423540)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_table.cpp:1537
#24 0x41de9d78 in khtml::RenderContainer::layout() (this=0x8420e4c)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_container.cpp:347
#25 0x41dfa62c in khtml::RenderTable::layout() (this=0x8420db0)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_table.cpp:267
#26 0x41dd9668 in khtml::RenderBlock::layoutBlockChildren(bool) (this=0x8420d40,
    relayoutChildren=true)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:822
#27 0x41dd8632 in khtml::RenderBlock::layoutBlock(bool) (this=0x8420d40,
    relayoutChildren=true)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:500
#28 0x41dd8111 in khtml::RenderBlock::layout() (this=0x8420d40)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:418
#29 0x41dd9668 in khtml::RenderBlock::layoutBlockChildren(bool) (this=0x8420ccc,
    relayoutChildren=true)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:822
#30 0x41dd8632 in khtml::RenderBlock::layoutBlock(bool) (this=0x8420ccc,
    relayoutChildren=true)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:500
#31 0x41dd8111 in khtml::RenderBlock::layout() (this=0x8420ccc)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:418
#32 0x41e1969e in khtml::RenderBody::layout() (this=0x8420ccc)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_body.cpp:92
#33 0x41dd9668 in khtml::RenderBlock::layoutBlockChildren(bool) (this=0x8420c14,
    relayoutChildren=true)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:822
#34 0x41dd8632 in khtml::RenderBlock::layoutBlock(bool) (this=0x8420c14,
    relayoutChildren=true)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:500
#35 0x41dd8111 in khtml::RenderBlock::layout() (this=0x8420c14)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:418
#36 0x41dd9668 in khtml::RenderBlock::layoutBlockChildren(bool) (this=0x8420b30,
    relayoutChildren=false)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:822
#37 0x41dd8632 in khtml::RenderBlock::layoutBlock(bool) (this=0x8420b30,
    relayoutChildren=false)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:500
#38 0x41dd8111 in khtml::RenderBlock::layout() (this=0x8420b30)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:418
#39 0x41e12b33 in khtml::RenderCanvas::layout() (this=0x8420b30)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_canvas.cpp:154
#40 0x41d360da in KHTMLView::layout() (this=0x83bfff8)
    at /home/thiago/programs/src/kde/kdelibs/khtml/khtmlview.cpp:579
#41 0x41d357e8 in KHTMLView::viewportResizeEvent(QResizeEvent*) (this=0x83bfff8,
    e=0xbfffe990) at /home/thiago/programs/src/kde/kdelibs/khtml/khtmlview.cpp:420
#42 0x40c25dec in QScrollView::updateScrollBars() ()
   from /home/thiago/programs/obj-linux/kde/qt-copy/lib/libqt-mt.so.3
#43 0x40e5035c in QScrollView::qt_invoke(int, QUObject*) ()
   from /home/thiago/programs/obj-linux/kde/qt-copy/lib/libqt-mt.so.3
#44 0x41d34663 in KHTMLView::qt_invoke(int, QUObject*) (this=0x83bfff8, _id=52,
    _o=0xbfffeb00) at khtmlview.moc:111
#45 0x40b0fe09 in QObject::activate_signal(QConnectionList*, QUObject*) ()
   from /home/thiago/programs/obj-linux/kde/qt-copy/lib/libqt-mt.so.3
#46 0x40b0fc05 in QObject::activate_signal(int) ()
   from /home/thiago/programs/obj-linux/kde/qt-copy/lib/libqt-mt.so.3
#47 0x40e3cb78 in QTimer::timeout() ()
   from /home/thiago/programs/obj-linux/kde/qt-copy/lib/libqt-mt.so.3
#48 0x40b30f9b in QTimer::event(QEvent*) ()
   from /home/thiago/programs/obj-linux/kde/qt-copy/lib/libqt-mt.so.3
#49 0x40ab26e9 in QApplication::internalNotify(QObject*, QEvent*) ()
   from /home/thiago/programs/obj-linux/kde/qt-copy/lib/libqt-mt.so.3
#50 0x40ab1d18 in QApplication::notify(QObject*, QEvent*) ()
   from /home/thiago/programs/obj-linux/kde/qt-copy/lib/libqt-mt.so.3
#51 0x4068702e in KApplication::notify(QObject*, QEvent*) (this=0xbffff3a0,
    receiver=0x84a1794, event=0xbfffee70)
    at /home/thiago/programs/src/kde/kdelibs/kdecore/kapplication.cpp:503
#52 0x40aa1514 in QEventLoop::activateTimers() ()
   from /home/thiago/programs/obj-linux/kde/qt-copy/lib/libqt-mt.so.3
#53 0x40a5cb33 in QEventLoop::processEvents(unsigned) ()
   from /home/thiago/programs/obj-linux/kde/qt-copy/lib/libqt-mt.so.3
#54 0x40ac64b3 in QEventLoop::enterLoop() ()
   from /home/thiago/programs/obj-linux/kde/qt-copy/lib/libqt-mt.so.3
#55 0x40ac6378 in QEventLoop::exec() ()
   from /home/thiago/programs/obj-linux/kde/qt-copy/lib/libqt-mt.so.3
#56 0x40ab2918 in QApplication::exec() ()
   from /home/thiago/programs/obj-linux/kde/qt-copy/lib/libqt-mt.so.3
#57 0x4165506e in kdemain (argc=4, argv=0x805f060)
    at /home/thiago/programs/src/kde/kdebase/konqueror/konq_main.cc:177
#58 0x4160f966 in kdeinitmain (argc=4, argv=0x805f060) at konqueror_dummy.cc:2
#59 0x0804cb1d in launch (argc=4, _name=0x8064db4 "konqueror",
    args=0x8064de8 "/home/thiago", cwd=0x8064de8 "/home/thiago", envc=44,
    envs=0x8065365 "", reset_env=true, tty=0x0, avoid_loops=false,
    startup_id_str=0x8065369 "prometheus.local.lan;1071850713;805969;2864")
    at /home/thiago/programs/src/kde/kdelibs/kinit/kinit.cpp:604
#60 0x0804df0e in handle_launcher_request (sock=4)
    at /home/thiago/programs/src/kde/kdelibs/kinit/kinit.cpp:1167
#61 0x0804e4c6 in handle_requests (waitForPid=0)
    at /home/thiago/programs/src/kde/kdelibs/kinit/kinit.cpp:1350
#62 0x0804f369 in main (argc=3, argv=0xbffffa74, envp=0xbffffa84)
    at /home/thiago/programs/src/kde/kdelibs/kinit/kinit.cpp:1797
#63 0x4142e654 in __libc_start_main () from /lib/libc.so.6

If I step for a while, it seems it never leaves frame #1. So it's looping infinitly in:
#0  khtml::RenderBlock::positionNewFloats() (this=0x84620e4)
    at /home/thiago/programs/src/kde/kdelibs/khtml/rendering/render_block.cpp:1374
1371                while (rightRelOffset(y,ro, &heightRemainingRight)-fx < fwidth)
1372                {
1373                    y += kMin( heightRemainingLeft, heightRemainingRight );
1374                    fx = leftRelOffset(y,lo, &heightRemainingLeft);
1375                }
Comment 4 Jo Øiongen 2003-12-19 23:57:07 UTC
I got CVS head 20031217, Kernel 2.6.0-test11 and GCC-3.3.1 and no problems with the page at all.

Hope this helps in some way :-)

Cheers Jo
Comment 5 Stephan Kulow 2004-01-12 18:09:45 UTC
*** Bug 66452 has been marked as a duplicate of this bug. ***
Comment 6 Stephan Kulow 2004-01-12 18:18:36 UTC
how I hate it when they kill my machine :)
Comment 7 Waldo Bastian 2004-01-12 19:04:19 UTC
Loop is due to
	left += style()->textIndent().minWidth(cw);
in RenderBlock::leftRelOffset

This is basically a constant part so it should be added to lo in
RenderBlock::positionNewFloats() instead, otherwise
	fwidth = ro - lo; // Never look for more than what will be available.
will not shrink the width far enough.

Same for ro / rightRelOffset
Comment 8 Dirk Mueller 2004-01-12 19:20:33 UTC
Subject: kdelibs/khtml

CVS commit by mueller: 

anybody bored enough to add a regression test? pretty Please!!

CCMAIL: 70608-done@bugs.kde.org


  M +3 -0      ChangeLog   1.153
  M +11 -11    rendering/render_block.cpp   1.18
  M +2 -2      rendering/render_block.h   1.13


--- kdelibs/khtml/ChangeLog  #1.152:1.153
@@ -1,4 +1,7 @@
 2004-01-12  Dirk Mueller  <mueller@kde.org>
 
+        * rendering/render_block.cpp (left/rightRelOffset): recursion protection
+        (#70608).
+
         * rendering/render_image.cpp (updateFromElement): add tracking of
         an oldimage, to avoid a "shoot out" effect on hovering expired images.

--- kdelibs/khtml/rendering/render_block.cpp  #1.17:1.18
@@ -1368,9 +1368,9 @@ void RenderBlock::positionNewFloats()
             int heightRemainingLeft = 1;
             int heightRemainingRight = 1;
-            int fx = leftRelOffset(y,lo, &heightRemainingLeft);
-            while (rightRelOffset(y,ro, &heightRemainingRight)-fx < fwidth)
+            int fx = leftRelOffset(y,lo, false, &heightRemainingLeft);
+            while (rightRelOffset(y,ro, false, &heightRemainingRight)-fx < fwidth)
             {
                 y += kMin( heightRemainingLeft, heightRemainingRight );
-                fx = leftRelOffset(y,lo, &heightRemainingLeft);
+                fx = leftRelOffset(y,lo, false, &heightRemainingLeft);
             }
             if (fx<0) fx=0;
@@ -1385,9 +1385,9 @@ void RenderBlock::positionNewFloats()
             int heightRemainingLeft = 1;
             int heightRemainingRight = 1;
-            int fx = rightRelOffset(y,ro, &heightRemainingRight);
-            while (fx - leftRelOffset(y,lo, &heightRemainingLeft) < fwidth)
+            int fx = rightRelOffset(y,ro, false, &heightRemainingRight);
+            while (fx - leftRelOffset(y,lo, false, &heightRemainingLeft) < fwidth)
             {
                 y += kMin(heightRemainingLeft, heightRemainingRight);
-                fx = rightRelOffset(y,ro, &heightRemainingRight);
+                fx = rightRelOffset(y,ro, false, &heightRemainingRight);
             }
             if (fx<f->width) fx=f->width;
@@ -1439,5 +1439,5 @@ RenderBlock::leftOffset() const
 
 int
-RenderBlock::leftRelOffset(int y, int fixedOffset, int *heightRemaining ) const
+RenderBlock::leftRelOffset(int y, int fixedOffset, bool applyTextIndent, int *heightRemaining ) const
 {
     int left = fixedOffset;
@@ -1458,7 +1458,7 @@ RenderBlock::leftRelOffset(int y, int fi
     }
 
-    if ( m_firstLine && style()->direction() == LTR ) {
+    if (applyTextIndent && m_firstLine && style()->direction() == LTR ) {
         int cw=0;
-        if (style()->textIndent().isPercent())
+        if (style()->textIxndent().isPercent())
             cw = containingBlock()->contentWidth();
         left += style()->textIndent().minWidth(cw);
@@ -1479,5 +1479,5 @@ RenderBlock::rightOffset() const
 
 int
-RenderBlock::rightRelOffset(int y, int fixedOffset, int *heightRemaining ) const
+RenderBlock::rightRelOffset(int y, int fixedOffset, bool applyTextIndent, int *heightRemaining ) const
 {
     int right = fixedOffset;
@@ -1499,5 +1499,5 @@ RenderBlock::rightRelOffset(int y, int f
     }
 
-    if ( m_firstLine && style()->direction() == RTL ) {
+    if (applyTextIndent &&  m_firstLine && style()->direction() == RTL ) {
         int cw=0;
         if (style()->textIndent().isPercent())

--- kdelibs/khtml/rendering/render_block.h  #1.12:1.13
@@ -145,9 +145,9 @@ public:
 
     int rightOffset() const;
-    int rightRelOffset(int y, int fixedOffset, int *heightRemaining = 0) const;
+    int rightRelOffset(int y, int fixedOffset, bool applyTextIndent=true, int *heightRemaining = 0) const;
     int rightOffset(int y) const { return rightRelOffset(y, rightOffset()); }
 
     int leftOffset() const;
-    int leftRelOffset(int y, int fixedOffset, int *heightRemaining = 0) const;
+    int leftRelOffset(int y, int fixedOffset, bool applyTextIndent=true, int *heightRemaining = 0) const;
     int leftOffset(int y) const { return leftRelOffset(y, leftOffset()); }
 


Comment 9 Andy Goossens 2004-01-13 14:39:57 UTC
Created attachment 4139 [details]
testcase for hanging khtml

Dirk, I was bored enough to create a testcase :-)

Note: the original Kerneltrap page hung only when the window was too narrow.
This testcase hangs 100% of the time for me.

I would like to thank KWin for its "easy killing of hanging apps" feature. :-)
Comment 10 Stephan Kulow 2004-01-13 21:44:49 UTC
Subject: Re:  konqueror stops responding while viewing specific url

Am Dienstag 13 Januar 2004 14:39 schrieb Andy Goossens:
> ------- You are receiving this mail because: -------
> You are on the CC list for the bug, or are watching someone who is.
>
> http://bugs.kde.org/show_bug.cgi?id=70608
>
>
>
>
> ------- Additional Comments From andygoossens@pandora.be  2004-01-13 14:39
> ------- Created an attachment (id=4139)
>  --> (http://bugs.kde.org/attachment.cgi?id=4139&action=view)
> testcase for hanging khtml
>
> Dirk, I was bored enough to create a testcase :-)
You'll get a Riesen! :)

Greetings, Stephan