Closed Bug 36902 Opened 24 years ago Closed 23 years ago

Trunk crash [FIX]SEGV in [@ nsImageFrame::Paint] when visiting Dejanews powersearch

Categories

(Core Graveyard :: GFX, defect, P3)

x86
Linux
defect

Tracking

(Not tracked)

VERIFIED FIXED

People

(Reporter: cks+mozilla, Assigned: rods)

References

()

Details

(Keywords: crash, topcrash, Whiteboard: [nsbeta2-] Fix in hand)

Crash Data

Attachments

(9 files)

Build: recent CVS pull

 Visiting the URL mentionted results in a SEGV in libraptorhtml.so's
nsImageFrame::Paint routine. Partial stack backtrace:

(gdb) where
#0  0x40bc99bf in nsImageFrame::Paint ()
   from /scratch/mozilla/dist/bin/components/libraptorhtml.so
#1  0x40bb6fbf in nsContainerFrame::PaintChild ()
   from /scratch/mozilla/dist/bin/components/libraptorhtml.so
#2  0x40bb6e94 in nsContainerFrame::PaintChildren ()
   from /scratch/mozilla/dist/bin/components/libraptorhtml.so
#3  0x40bc3a4e in nsHTMLContainerFrame::Paint ()
   from /scratch/mozilla/dist/bin/components/libraptorhtml.so
#4  0x40bb6fbf in nsContainerFrame::PaintChild ()
   from /scratch/mozilla/dist/bin/components/libraptorhtml.so
#5  0x40bb33c5 in nsBlockFrame::PaintChildren ()
   from /scratch/mozilla/dist/bin/components/libraptorhtml.so
#6  0x40bb3215 in nsBlockFrame::Paint ()
   from /scratch/mozilla/dist/bin/components/libraptorhtml.so

[I will put in the full stack backtrace as an attachment.]
Confirming bug. Reproduced on PC/Linux with builds 2000042113 and 2000042518.
See above attachment for a backtrace (without debug symbols in libraptorhtml.so)
However, I always crash like this:
#0  0x0 in ?? ()

Steps to reproduce:
1. load http://www.deja.com/home_ps.shtml
2. enter asdfasdfasdfasdf in the "DISCUSSIONS SEARCH" text input field
   which is located at the top right of the page
3. click on the "SEARCH>>" button right next to it
4. watch the window title to change to "Deja.com: Error - Mozilla", and crash.

Adding crash keyword, setting severity to critical.
Severity: normal → critical
Status: UNCONFIRMED → NEW
Ever confirmed: true
Keywords: crash
This full stack trace shows that the testcase attached is something completely
different from the original bug report. It crashes in nsLineBox::DeleteLineList
and not in "Paint()" methods. Unfortunately I had mixed these things up.
Bug 37493 is about www.starwars.com being another testcase for the crash 
I observed, so my issue could be handled there as well.

cks+netscape@hawkwind.utcs.toronto.edu: Can you provide a little more
information about your case? Have you been able to reproduce it, and does 
it still occur in the actual tree? Or is it some random behaviour?
Can you think of any reason why I can always load the mentioned URL 
without segv'ing? I'm sorry that I made it such a mess.
 I can still reproduce this 100% in the near-latest CVS tree.

 What appears to do it is using a proxy. If I don't use a proxy,
all is fine. If I use my usual proxy (the junkbuster proxy from
http://www.junkbusters.com/) it dies promptly and reliably.

 Prefs.js entries I'm using that may be relevant:
	user_pref("network.http.proxy.keep-alive", 0);
	user_pref("network.proxy.http", "128.100.102.185");
	user_pref("network.proxy.http_port", 8000);
	user_pref("network.proxy.type", 1);
(note that my proxy is not useable by outside people, so the
most interesting ones are the type and perhaps the keep-alive
setting).
I still can't reproduce this. From home, I'm using a proxy (Squid), and
build 2000042609 works fine. I also installed junkbuster on one of our
machines at the university, and it's still fine on all mozilla versions
I've tested.
Since the crash is in paint methods, it shouldn't be network related.
Maybe it's the new page created by junkbuster that crashes. If this is
true, then the information from your blocker file will be necessary to 
reproduce this. Can you attach it to this bug? Also could you try to
load the page with a different, non-crashing browser, save it to a local
disk, and see if mozilla also crashes on this local file? (Maybe it's 
necessary to load the complete page into composer and save the it from there,
including all gifs etc.) If so, it  would be most helpful if you could attach
the page or a compressed archive of all the neccessary files to this bug.
Thanks.
 This is reproduceable in the latest nightly build with my current proxy
configuration (attached above).
 It happens for a local version of the HTML, but the raw HTML calls out
to other servers to load the image, so the proxy is still involved.

 You will have to clear your disk cache in order to test it; if the disk
cache is loaded with the images (such as by visiting a stored version of
the page with the proxy off) later loads of the stored page will be fine.
 I've found a minimal test case.

 The problem appears to be when an image has both a 'lowsrc=...' and a
'src=...' tag, and the SRC version of the image but not the LOWSRC one
is blocked by the proxy. (It has to be blocked, as opposed to just not
being there.)

 I'll attach the minimal test case (you need to block 'deja.com/ads' in
the junkbuster config) here.
Reassinging to rods, lowsrc..src implementor.
Assignee: kmcclusk → rods
waqar, this works fine on NT could check it out on Linux?
Assignee: rods → waqar
I still can't reproduce this (see above screenshot).

cks+netscape@hawkwind.utcs.toronto.edu: Can you guess what else
could be the reason that I'm still not crashing? It's a direct
connection here, but that should not make any difference.
What should the screenshot be like in case that mozilla behaves 
as it should?
Accepting
Status: NEW → ASSIGNED
Target Milestone: --- → M16
 I can't see what would be different about our configurations
that would cause my Mozillas to crash consistently and yours
not to. If you give me an IP number or the like, I can fiddle
my junkbuster configuration so that you can work through it
so you're using my exact configuration/etc there.
Oops, it seems that my last comment got lost due to some database
connectivity problems yesterday. So here we go once again:

I finally could reproduce the crash on http://www.deja.com/home_ps.shtml
several times (about 4 times out of ~20 tries) using Chris' junkbuster.
I took two full stack traces; one of them was really identical to the first 
attachment of this bug, and had was nearly identical (#0-#36 were the same).

Thus the good news is that this bug is real... ;-)
This bug has been marked "future" because the original netscape engineer working
on this is over-burdened. If you feel this is an error, that you or another
known resource will be working on this bug,or if it blocks your work in some way
-- please attach your concern to the bug for reconsideration.
 This bug continues to pretty much block me from using DejaNews with
Mozilla. Since I had the time, I built a Mozilla version (pulled from
CVS today) without '--disable-debug', and captured a 'where full' gdb
stack backtrace, which I will make an attachment of.
M16 has been out for a while now, these bugs target milestones need to be 
updated.
2/23/2000 build it works fine for me. I can visit the deja page and the test
case as well without crashing.
Status: ASSIGNED → RESOLVED
Closed: 24 years ago
Resolution: --- → WORKSFORME
Verified works for me in the July 11th build.
Status: RESOLVED → VERIFIED
 I'm afraid that this bug is still there for me with a CVS pull from today.
Same stack backtrace. Thus: reopening the bug.
Status: VERIFIED → REOPENED
Resolution: WORKSFORME → ---
Reassigning (back) to rods@netscape.com based on CVS blame, cc previous owner.

This comment should summarize all the information necessary to fix this bug.
Especially note that my attachments made between 4/26 and 4/29 are irrelevant to
this bug, please ignore them.

From the full stack trace (attachment 06 [details]/17/00 16:53), you can see that the
crash happens in nsImageFrame.cpp, line 606, while dereferencing image which is
null. lowImage is non-null however, and that's why we get into the else branch:
 
 585                    if (nsnull == image && nsnull == lowImage) {
 586 troy     1.6         // No image yet, or image load failed. 
                          // Draw the alt-text and an icon
 587                      // indicating the status
 588 nisheeth 1.113       if (NS_FRAME_PAINT_LAYER_BACKGROUND == aWhichLayer &&
 589                          !mInitialLoadCompleted) {
 590 kipp     1.38          DisplayAltFeedback(aPresContext, aRenderingContext,
 591                                           mImageLoader.GetLoadImageFailed()
 592                                           ? NS_ICON_BROKEN_IMAGE
 593                                           : NS_ICON_LOADING_IMAGE);
 594                      }
 595 kipp     1.1       }
 596 kipp     1.71      else {
 597 nisheeth 1.113       mInitialLoadCompleted = PR_TRUE;
 598 kipp     1.73        if (NS_FRAME_PAINT_LAYER_FOREGROUND == aWhichLayer) {
 599 kipp     1.71          // Now render the image into our content area 
                            // (the area inside the
 600                        // borders and padding)
 601                        nsRect inner;
 602 tbogard  1.101         GetInnerArea(aPresContext, inner);
 603 kipp     1.71          if (mImageLoader.GetLoadImageFailed()) {
 604                          float p2t;
 605 tbogard  1.101           aPresContext->GetScaledPixelsToTwips(&p2t);
 606 rods     1.117           inner.width  =                
                                    NSIntPixelsToTwips(image->GetWidth(), p2t);
 607 kipp     1.71            inner.height = 
                                    NSIntPixelsToTwips(image->GetHeight(), p2t);
 608                        }
 609 rods     1.117 
 610                        if (lowImage != nsnull && lowSrcLinesLoaded > 0) {
 611                          //inner.height = lowSrcLinesLoaded;
 612                          aRenderingContext.DrawImage(lowImage, inner);
 613                        }
 614                
 615                        if (image != nsnull && imgSrcLinesLoaded > 0) {
 616                          //inner.height = imgSrcLinesLoaded;
 617                          aRenderingContext.DrawImage(image, inner);
 618                        }
 619 kipp     1.71        }

It seems to me that a non-null lowImage together with a null image is a valid
situation at this point (see e.g. line 615), but it inevitably leads to a crash.

Maybe you could fix this even without a testcase? Chris (the original reporter)
could test your patch and verify that it fixes the crash for him.
Assignee: waqar → rods
Status: REOPENED → NEW
 Armed with Andreas Franke's analysis (thank you, Andreas!) I've made a
simplistic, obvious patch to try to work around the problem, which I will
glue in as an attachment. A patched Mozilla no longer crashes, and seems
to otherwise behave normally. I don't know if what I'm doing in the patch
is itself proper, or if there is a better alternative; it should obviously
be reviewed by someone more familiar with the code.
fix is from submitted patch, looks like the right thing to, low risk
Status: NEW → ASSIGNED
Keywords: nsbeta2
Summary: SEGV in nsImageFrame::Paint when visiting Dejanews powersearch → [FIX]SEGV in nsImageFrame::Paint when visiting Dejanews powersearch
Whiteboard: Fix in hand
Putting on [nsbeta2-] radar. Not critical to beta2. This is in a debug build 
renominate if you see this in the commercial builds.  Also, if the fix is 
from an outside contributor, talk to watterson about the a checkin.
Whiteboard: Fix in hand → [nsbeta2-] Fix in hand
fixed
Status: ASSIGNED → RESOLVED
Closed: 24 years ago24 years ago
Resolution: --- → FIXED
Fixed in the July 26th build.
Status: RESOLVED → VERIFIED
Reopening
This bug is a topcrasher, added topcrash keyword.  
Added [@ nsImageFrame::Paint] for tracking.  

Here are some URLs & Comments that might help repro this crash:

    (28432441) URL: 
http://rigaut.home.cern.ch/rigaut/about.html
     (28617667) Comments: search mail/news messages.
Open message in a standalone window.  crashed.


Here is a recent stack trace:

         nsImageFrame::Paint()  
         nsContainerFrame::PaintChild()  
         nsContainerFrame::PaintChildren()  
         nsHTMLContainerFrame::Paint()  
         nsContainerFrame::PaintChild()  
         nsBlockFrame::PaintChildren()  
         nsBlockFrame::Paint()  
         nsContainerFrame::PaintChild()  
         nsContainerFrame::PaintChildren()  
         nsTableCellFrame::Paint()  
         nsTableRowFrame::PaintChildren()  
         nsTableRowFrame::Paint()  
         nsTableRowGroupFrame::PaintChildren()  
         nsTableRowGroupFrame::Paint()  
         nsContainerFrame::PaintChild()  
         nsContainerFrame::PaintChildren()  
         nsTableFrame::Paint()  
         nsContainerFrame::PaintChild()  
         nsTableOuterFrame::Paint()  
         nsContainerFrame::PaintChild()  
         nsBlockFrame::PaintChildren()  
         nsBlockFrame::Paint()  
         nsContainerFrame::PaintChild()  
         nsBlockFrame::PaintChildren()  
         nsBlockFrame::Paint()  
         nsContainerFrame::PaintChild()  
         nsContainerFrame::PaintChildren()  
         nsHTMLContainerFrame::Paint()  
         PresShell::Paint()  
         nsView::Paint()  
         nsViewManager::RenderDisplayListElement()  
         nsViewManager::RenderViews()  
         nsViewManager::Refresh()  
         nsViewManager::DispatchEvent()  
         HandleEvent()  
         nsWidget::DispatchEvent()  
         nsWidget::DispatchWindowEvent()  
         nsWindow::DoPaint()  
         nsWindow::Update()  
         nsWindow::Update()  
         nsViewManager::Composite()  
         nsViewManager::UpdateViewAfterScroll()  
         nsScrollPortView::Scroll()  
         nsScrollPortView::ScrollTo()  
         nsScrollPortView::ScrollByLines()  
         nsEventStateManager::DoWheelScroll()  
         nsEventStateManager::PostHandleEvent()  
         PresShell::HandleEventInternal()  
         PresShell::HandleEvent()  
         nsView::HandleEvent()  
         nsView::HandleEvent()  
         nsView::HandleEvent()  
         nsViewManager::DispatchEvent()  
         HandleEvent()  
         nsWidget::DispatchEvent()  
         nsWidget::DispatchWindowEvent()  
         nsWidget::OnButtonPressSignal()  
         nsWindow::HandleGDKEvent()  
         dispatch_superwin_event()  
         handle_gdk_event()  
         libgdk-1.2.so.0 + 0x17d00 (0x40622d00)  
    nsImageFrame::Paint f534b632
Status: VERIFIED → REOPENED
Keywords: topcrash
Resolution: FIXED → ---
Summary: [FIX]SEGV in nsImageFrame::Paint when visiting Dejanews powersearch → [FIX]SEGV in nsImageFrame::Paint when visiting Dejanews powersearch [@ nsImageFrame::Paint]
Could this be a dup of 74017?  Adding sairuh to cc list since she seems to know 
more about this crash.
Summary: [FIX]SEGV in nsImageFrame::Paint when visiting Dejanews powersearch [@ nsImageFrame::Paint] → [FIX]SEGV in [@ nsImageFrame::Paint] when visiting Dejanews powersearch
*** Bug 76249 has been marked as a duplicate of this bug. ***
Here are more URLs & Comments that might help repro this crash:
     (29135392) URL: http://www.amd.com/products/cpg/bin/miniport_480_winme.exe
     (29135309) URL: http://www.amd.com/products/cpg/bin/miniport_480_winme.exe
     (28892233) Comments: Crash when deleting emails
     (28891764) Comments: crash while deleting emails
i think this is different from bug 74017, since 74017 is particular to the
recent libpr0n landing. cc'ing terri and pav to see what they think.
<Hixie> Should this really be a reopened bug? It seems like it would be a new
bug to me.
Target Milestone: M16 → ---
Putting this bug back to Verified Fixed.  No need to log another bug for the 
latest nsImageFrame::Paint crash, since this crash hasn't happened since build 
2001041322.
Status: REOPENED → RESOLVED
Closed: 24 years ago23 years ago
Resolution: --- → FIXED
Ok, this is now back to it's status on 07/26/00.  If the crash mentioned in any 
comments later than that date comes up again, we'll log another bug.
Status: RESOLVED → VERIFIED
Summary: [FIX]SEGV in [@ nsImageFrame::Paint] when visiting Dejanews powersearch → Trunk crash [FIX]SEGV in [@ nsImageFrame::Paint] when visiting Dejanews powersearch
Product: Core → Core Graveyard
Crash Signature: [@ nsImageFrame::Paint]
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: