Closed Bug 525054 Opened 15 years ago Closed 15 years ago

ASSERTION: aFileExt shouldn't start with a dot: 'aFileExt[0] != '.'', file /home/jwalden/moz/2/uriloader/exthandler/unix/nsGNOMERegistry.cpp, line 129

Categories

(Core :: Graphics: ImageLib, defect)

defect
Not set
normal

Tracking

()

RESOLVED DUPLICATE of bug 416743

People

(Reporter: Waldo, Unassigned)

Details

(Keywords: assertion)

If I try to save this URL:

  data:text/html,

on my system using name like foo.html, I get an assertion when the download manager tries to load the icon that corresponds with the newly-downloaded file:

#0  nsGNOMERegistry::GetFromExtension (aFileExt=@0x7fffffff9910) at /home/jwalden/moz/2/uriloader/exthandler/unix/nsGNOMERegistry.cpp:130
#1  0x00007fffe702747a in nsOSHelperAppService::GetFromExtension (this=0x7fffe79a9f80, aFileExt=@0x7fffffff9910) at /home/jwalden/moz/2/uriloader/exthandler/unix/nsOSHelperAppService.cpp:1321
#2  0x00007fffe7028793 in nsOSHelperAppService::GetMIMEInfoFromOS (this=0x7fffe79a9f80, aType=@0x7ffff7744890, aFileExt=@0x7fffffff9bb0, aFound=0x7fffffff9a4c)
    at /home/jwalden/moz/2/uriloader/exthandler/unix/nsOSHelperAppService.cpp:1557
#3  0x00007fffe701602b in nsExternalHelperAppService::GetTypeFromExtension (this=0x7fffe79a9f80, aFileExt=@0x7fffffff9bb0, aContentType=@0x7fffffff9c50)
    at /home/jwalden/moz/2/uriloader/exthandler/nsExternalHelperAppService.cpp:2586
#4  0x00007fffe1a40196 in nsIconChannel::InitWithGnome (this=0x7fffda8b40c0, aIconURI=0x7fffdb9efac0) at /home/jwalden/moz/2/modules/libpr0n/decoders/icon/gtk/nsIconChannel.cpp:397
#5  0x00007fffe1a4053b in nsIconChannel::Init (this=0x7fffda8b40c0, aURI=0x7fffdb9efac0) at /home/jwalden/moz/2/modules/libpr0n/decoders/icon/gtk/nsIconChannel.cpp:465
#6  0x00007fffe1a3da16 in nsIconProtocolHandler::NewChannel (this=0x7ffff67f95e0, url=0x7fffdb9efac0, result=0x7fffffff9fe0)
    at /home/jwalden/moz/2/modules/libpr0n/decoders/icon/nsIconProtocolHandler.cpp:116
#7  0x00007fffed8edda9 in nsIOService::NewChannelFromURI (this=0x7ffff68469c0, aURI=0x7fffdb9efac0, result=0x7fffffff9fe0) at /home/jwalden/moz/2/netwerk/base/src/nsIOService.cpp:579
#8  0x00007fffe2cbc4a0 in NS_NewChannel (result=0x7fffffffa2d0, uri=0x7fffdb9efac0, ioService=0x7ffff68469c0, loadGroup=0x0, callbacks=0x7fffda5925a0, loadFlags=2048)
    at ../../../dist/include/nsNetUtil.h:181
#9  0x00007fffe2cb42ef in NewImageChannel(struct nsIChannel **, struct nsIURI *, struct nsIURI *, struct nsIURI *, struct nsILoadGroup *, const nsCString &, nsLoadFlags) (aResult=0x7fffffffa2d0, 
    aURI=0x7fffdb9efac0, aInitialDocumentURI=0x7fffda82fc70, aReferringURI=0x7fffda82fc70, aLoadGroup=0x7fffdb71a270, aAcceptHeader=@0x7fffe12315f0, aLoadFlags=2048)
    at /home/jwalden/moz/2/modules/libpr0n/src/imgLoader.cpp:324
#10 0x00007fffe2cb8c26 in imgLoader::LoadImage (this=0x7fffe12315b0, aURI=0x7fffdb9efac0, aInitialDocumentURI=0x7fffda82fc70, aReferrerURI=0x7fffda82fc70, aLoadGroup=0x7fffdb71a270, 
    aObserver=0x7fffda8b40a0, aCX=0x7fffda877800, aLoadFlags=2048, aCacheKey=0x0, aRequest=0x0, _retval=0x7fffda560838) at /home/jwalden/moz/2/modules/libpr0n/src/imgLoader.cpp:1422
#11 0x00007fffe87170af in nsContentUtils::LoadImage (aURI=0x7fffdb9efac0, aLoadingDocument=0x7fffda877800, aLoadingPrincipal=0x7ffff6717f10, aReferrer=0x7fffda82fc70, aObserver=0x7fffda8b40a0, 
    aLoadFlags=2048, aRequest=0x7fffda560838) at /home/jwalden/moz/2/content/base/src/nsContentUtils.cpp:2472
#12 0x00007fffe86bd3eb in nsImageBoxFrame::UpdateImage (this=0x7fffda5607c8) at /home/jwalden/moz/2/layout/xul/base/src/nsImageBoxFrame.cpp:273
#13 0x00007fffe86bd102 in nsImageBoxFrame::Init (this=0x7fffda5607c8, aContent=0x7fffdb9b5380, aParent=0x7fffda5603b0, aPrevInFlow=0x0) at /home/jwalden/moz/2/layout/xul/base/src/nsImageBoxFrame.cpp:239
#14 0x00007fffe83e994f in nsCSSFrameConstructor::InitAndRestoreFrame (this=0x7fffda8deb00, aState=@0x7fffffffbb70, aContent=0x7fffdb9b5380, aParentFrame=0x7fffda5603b0, aPrevInFlow=0x0, 
    aNewFrame=0x7fffda5607c8, aAllowCounters=1) at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:4672
#15 0x00007fffe83e8108 in nsCSSFrameConstructor::ConstructFrameFromItemInternal (this=0x7fffda8deb00, aItem=@0x7fffdb9b3700, aState=@0x7fffffffbb70, aParentFrame=0x7fffda5603b0, 
    aFrameItems=@0x7fffffffade0) at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:3894
#16 0x00007fffe83eb810 in nsCSSFrameConstructor::ConstructFramesFromItem (this=0x7fffda8deb00, aState=@0x7fffffffbb70, aIter=@0x7fffffffa970, aParentFrame=0x7fffda5603b0, aFrameItems=@0x7fffffffade0)
    at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:5544
#17 0x00007fffe83f54bf in nsCSSFrameConstructor::ConstructFramesFromItemList (this=0x7fffda8deb00, aState=@0x7fffffffbb70, aItems=@0x7fffffffabc0, aParentFrame=0x7fffda5603b0, 
    aFrameItems=@0x7fffffffade0) at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:9490
#18 0x00007fffe83f5b17 in nsCSSFrameConstructor::ProcessChildren (this=0x7fffda8deb00, aState=@0x7fffffffbb70, aContent=0x7fffdb9b5320, aStyleContext=0x7fffda560308, aFrame=0x7fffda5603b0, 
    aCanHaveGeneratedContent=1, aFrameItems=@0x7fffffffade0, aAllowBlockStyles=0) at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:9602
#19 0x00007fffe83e83b0 in nsCSSFrameConstructor::ConstructFrameFromItemInternal (this=0x7fffda8deb00, aItem=@0x7fffdb9b3600, aState=@0x7fffffffbb70, aParentFrame=0x7fffda560268, 
    aFrameItems=@0x7fffffffb3a0) at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:3939
#20 0x00007fffe83eb810 in nsCSSFrameConstructor::ConstructFramesFromItem (this=0x7fffda8deb00, aState=@0x7fffffffbb70, aIter=@0x7fffffffaf30, aParentFrame=0x7fffda560268, aFrameItems=@0x7fffffffb3a0)
    at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:5544
#21 0x00007fffe83f54bf in nsCSSFrameConstructor::ConstructFramesFromItemList (this=0x7fffda8deb00, aState=@0x7fffffffbb70, aItems=@0x7fffffffb180, aParentFrame=0x7fffda560268, 
    aFrameItems=@0x7fffffffb3a0) at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:9490
#22 0x00007fffe83f5b17 in nsCSSFrameConstructor::ProcessChildren (this=0x7fffda8deb00, aState=@0x7fffffffbb70, aContent=0x7fffdb8ffdc0, aStyleContext=0x7fffdba3daf8, aFrame=0x7fffda560268, 
    aCanHaveGeneratedContent=1, aFrameItems=@0x7fffffffb3a0, aAllowBlockStyles=0) at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:9602
#23 0x00007fffe83e83b0 in nsCSSFrameConstructor::ConstructFrameFromItemInternal (this=0x7fffda8deb00, aItem=@0x7fffdb9b3580, aState=@0x7fffffffbb70, aParentFrame=0x7fffda560148, 
    aFrameItems=@0x7fffffffb960) at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:3939
#24 0x00007fffe83eb810 in nsCSSFrameConstructor::ConstructFramesFromItem (this=0x7fffda8deb00, aState=@0x7fffffffbb70, aIter=@0x7fffffffb4f0, aParentFrame=0x7fffda560148, aFrameItems=@0x7fffffffb960)
    at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:5544
#25 0x00007fffe83f54bf in nsCSSFrameConstructor::ConstructFramesFromItemList (this=0x7fffda8deb00, aState=@0x7fffffffbb70, aItems=@0x7fffffffb740, aParentFrame=0x7fffda560148, 
    aFrameItems=@0x7fffffffb960) at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:9490
#26 0x00007fffe83f5b17 in nsCSSFrameConstructor::ProcessChildren (this=0x7fffda8deb00, aState=@0x7fffffffbb70, aContent=0x7fffdb8ffa00, aStyleContext=0x7fffdb9c7e88, aFrame=0x7fffda560148, 
    aCanHaveGeneratedContent=1, aFrameItems=@0x7fffffffb960, aAllowBlockStyles=0) at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:9602
#27 0x00007fffe83e83b0 in nsCSSFrameConstructor::ConstructFrameFromItemInternal (this=0x7fffda8deb00, aItem=@0x7fffdb9b3500, aState=@0x7fffffffbb70, aParentFrame=0x7fffdb978cc0, 
    aFrameItems=@0x7fffffffbc60) at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:3939
#28 0x00007fffe83eb810 in nsCSSFrameConstructor::ConstructFramesFromItem (this=0x7fffda8deb00, aState=@0x7fffffffbb70, aIter=@0x7fffffffbab0, aParentFrame=0x7fffdb978cc0, aFrameItems=@0x7fffffffbc60)
    at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:5544
#29 0x00007fffe83f54bf in nsCSSFrameConstructor::ConstructFramesFromItemList (this=0x7fffda8deb00, aState=@0x7fffffffbb70, aItems=@0x7fffffffbc00, aParentFrame=0x7fffdb978cc0, 
    aFrameItems=@0x7fffffffbc60) at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:9490
#30 0x00007fffe83eeb39 in nsCSSFrameConstructor::ContentInserted (this=0x7fffda8deb00, aContainer=0x7fffdb9ee080, aChild=0x7fffdb8ffa00, aIndexInContainer=0, aFrameState=0x7fffdb8feda0)
    at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:6763
#31 0x00007fffe83ed5af in nsCSSFrameConstructor::ContentAppended (this=0x7fffda8deb00, aContainer=0x7fffdb9ee080, aNewIndexInContainer=0)
    at /home/jwalden/moz/2/layout/base/nsCSSFrameConstructor.cpp:6247
#32 0x00007fffe8474090 in PresShell::ContentAppended (this=0x7fffda81f400, aDocument=0x7fffda877800, aContainer=0x7fffdb9ee080, aNewIndexInContainer=0)
    at /home/jwalden/moz/2/layout/base/nsPresShell.cpp:5028
#33 0x00007fffe87b157d in nsNodeUtils::ContentAppended (aContainer=0x7fffdb9ee080, aNewIndexInContainer=0) at /home/jwalden/moz/2/content/base/src/nsNodeUtils.cpp:134
#34 0x00007fffe8796ae5 in nsGenericElement::doInsertChildAt (aKid=0x7fffdb8ffa00, aIndex=0, aNotify=1, aParent=0x7fffdb9ee080, aDocument=0x7fffda877800, aChildArray=@0x7fffdb9ee0b8)
    at /home/jwalden/moz/2/content/base/src/nsGenericElement.cpp:3296
#35 0x00007fffe87963d6 in nsGenericElement::InsertChildAt (this=0x7fffdb9ee080, aKid=0x7fffdb8ffa00, aIndex=0, aNotify=1) at /home/jwalden/moz/2/content/base/src/nsGenericElement.cpp:3227
#36 0x00007fffe87993c5 in nsGenericElement::doReplaceOrInsertBefore (aReplace=0, aNewChild=0x7fffdb8ffa40, aRefChild=0x0, aParent=0x7fffdb9ee080, aDocument=0x7fffda877800, aReturn=0x7fffffffc6c0)
    at /home/jwalden/moz/2/content/base/src/nsGenericElement.cpp:4011
#37 0x00007fffe87977b3 in nsGenericElement::InsertBefore (this=0x7fffdb9ee080, aNewChild=0x7fffdb8ffa40, aRefChild=0x0, aReturn=0x7fffffffc6c0)
    at /home/jwalden/moz/2/content/base/src/nsGenericElement.cpp:3546
#38 0x00007fffe8cb773c in nsXULElement::InsertBefore (this=0x7fffdb9ee080, newChild=0x7fffdb8ffa40, refChild=0x0, _retval=0x7fffffffc6c0)
    at /home/jwalden/moz/2/content/xul/content/src/nsXULElement.h:570
#39 0x00007fffe877f0a2 in nsGenericElement::AppendChild (this=0x7fffdb9ee080, aNewChild=0x7fffdb8ffa40, aReturn=0x7fffffffc6c0) at /home/jwalden/moz/2/content/base/src/nsGenericElement.h:504
#40 0x00007fffe8cb77eb in nsXULElement::AppendChild (this=0x7fffdb9ee080, newChild=0x7fffdb8ffa40, _retval=0x7fffffffc6c0) at /home/jwalden/moz/2/content/xul/content/src/nsXULElement.h:570
#41 0x00007fffefab1a72 in nsIDOMNode_AppendChild (cx=0x7fffda382c00, argc=1, vp=0x7fffda323158) at dom_quickstubs.cpp:3742
#42 0x00007ffff79f72f2 in js_Interpret (cx=0x7fffda382c00) at /home/jwalden/moz/2/js/src/jsops.cpp:2261
#43 0x00007ffff7a0bf4f in js_Invoke (cx=0x7fffda382c00, argc=1, vp=0x7fffda323038, flags=0) at /home/jwalden/moz/2/js/src/jsinterp.cpp:1371
#44 0x00007ffff7a0c23d in js_InternalInvoke (cx=0x7fffda382c00, obj=0x7fffdb857180, fval=140736877952512, flags=0, argc=1, argv=0x7fffda5d65a0, rval=0x7fffffffd1e0)
    at /home/jwalden/moz/2/js/src/jsinterp.cpp:1426
#45 0x00007ffff798768f in JS_CallFunctionValue (cx=0x7fffda382c00, obj=0x7fffdb857180, fval=140736877952512, argc=1, argv=0x7fffda5d65a0, rval=0x7fffffffd1e0)
    at /home/jwalden/moz/2/js/src/jsapi.cpp:5096
#46 0x00007fffe8a3ee38 in nsJSContext::CallEventHandler (this=0x7fffda8d11c0, aTarget=0x7fffda807000, aScope=0x7fffdb857180, aHandler=0x7fffdb9dfe00, aargv=0x7fffda5f3688, arv=0x7fffffffd330)
    at /home/jwalden/moz/2/dom/base/nsJSEnvironment.cpp:2093
#47 0x00007fffe8a7997b in nsGlobalWindow::RunTimeout (this=0x7fffda807000, aTimeout=0x7fffdb8ff460) at /home/jwalden/moz/2/dom/base/nsGlobalWindow.cpp:8029
#48 0x00007fffe8a7a655 in nsGlobalWindow::TimerCallback (aTimer=0x7fffdb8ff4c0, aClosure=0x7fffdb8ff460) at /home/jwalden/moz/2/dom/base/nsGlobalWindow.cpp:8363
#49 0x00007ffff74a3c2a in nsTimerImpl::Fire (this=0x7fffdb8ff4c0) at /home/jwalden/moz/2/xpcom/threads/nsTimerImpl.cpp:427
#50 0x00007ffff74a3e82 in nsTimerEvent::Run (this=0x7fffda8acd00) at /home/jwalden/moz/2/xpcom/threads/nsTimerImpl.cpp:519
#51 0x00007ffff749c43d in nsThread::ProcessNextEvent (this=0x7ffff682d280, mayWait=1, result=0x7fffffffd5bc) at /home/jwalden/moz/2/xpcom/threads/nsThread.cpp:527
#52 0x00007ffff7421ddc in NS_ProcessNextEvent_P (thread=0x7ffff682d280, mayWait=1) at nsThreadUtils.cpp:230
#53 0x00007fffea899e4b in nsBaseAppShell::Run (this=0x7ffff67f7630) at /home/jwalden/moz/2/widget/src/xpwidgets/nsBaseAppShell.cpp:170
#54 0x00007fffe5674ab1 in nsAppStartup::Run (this=0x7fffe4cb4920) at /home/jwalden/moz/2/toolkit/components/startup/src/nsAppStartup.cpp:182
#55 0x00007ffff7da873c in XRE_main (argc=4, argv=0x7fffffffdf38, aAppData=0x7ffff680a0f0) at /home/jwalden/moz/2/toolkit/xre/nsAppRunner.cpp:3471
#56 0x0000000000401f1f in main (argc=4, argv=0x7fffffffdf38) at /home/jwalden/moz/2/browser/app/nsBrowserApp.cpp:156

The context, moving to the right frame in the stack, is so:

#4  0x00007fffe1a40196 in nsIconChannel::InitWithGnome (this=0x7fffdb81a320, aIconURI=0x7ffff69da2e0) at /home/jwalden/moz/2/modules/libpr0n/decoders/icon/gtk/nsIconChannel.cpp:397
397	      ms->GetTypeFromExtension(fileExt, type);
(gdb) lis
392	  if (type.IsEmpty()) {
393	    nsCOMPtr<nsIMIMEService> ms(do_GetService("@mozilla.org/mime;1"));
394	    if (ms) {
395	      nsCAutoString fileExt;
396	      aIconURI->GetFileExtension(fileExt);
397	      ms->GetTypeFromExtension(fileExt, type);
398	    }
399	  }

aIconURI is this:

(gdb) p *aIconURI
$11 = (nsMozIconURI) {<nsIMozIconURI> = {<nsIURI> = {<nsISupports> = {_vptr.nsISupports = 0x7fffe1c53150}, <No data fields>}, <No data fields>}, mRefCnt = {mValue = 2}, _mOwningThread = {
    mThread = 0x7ffff6815040}, mFileIcon = {mRawPtr = 0x7ffff69342f0}, mSize = 32, mContentType = {<nsCStringContainer> = {<nsACString> = {<No data fields>}, <nsStringContainer_base> = {
        d1 = 0x7fffdb83ce98, d2 = 0, d3 = 5}, <No data fields>}, <No data fields>}, mDummyFilePath = {<nsCStringContainer> = {<nsACString> = {<No data fields>}, <nsStringContainer_base> = {
        d1 = 0x7fffdfd3c808, d2 = 48, d3 = 5}, <No data fields>}, <No data fields>}, mStockIcon = {<nsCStringContainer> = {<nsACString> = {<No data fields>}, <nsStringContainer_base> = {
        d1 = 0x7ffff77448b0, d2 = 0, d3 = 1}, <No data fields>}, <No data fields>}, mIconSize = -1, mIconState = -1}

aIconURI->mFileIcon is the URL of the download, e.g. "file:///tmp/foo.html".

Looking at nsMozIconURI::GetFileExtension it seems the code there is confused and thinks fileExtension should start with a '.'.  Of course, nsIIconURI.fileExtension doesn't really say what it should be (and nor does nsIURL.fileExtension, from which the initial value is read, at least not as explicitly as I would prefer), but the extra dot seems unlikly to help consumers who might, say, pass it along to the MIME service (which doesn't expect a leading dot).

So, probably this code should be changed to not munge in a '.'.  Also, nsIIconURI.fileExtension's docs should clarify that the returned value does not start with a leading dot, and probably (I haven't checked this) that the returned value is "" if there was no extension in the icon URI.  Also, for extra goodness, nsIURL.fileExtension docs should be clarified to explicitly say that the returned extension does not include a leading dot, preferably with an example or two or three to demonstrate what callers can expect for various URLs.

On the plus side, the icon gets chosen correctly, so at least this assertion doesn't point out any user-visible errors...
Whiteboard: [good first bug]
Oops, I forgot I'd opened a tab to search for this assertion before filing it; turns out it's already filed.
Status: NEW → RESOLVED
Closed: 15 years ago
Resolution: --- → DUPLICATE
Whiteboard: [good first bug]
You need to log in before you can comment on or make changes to this bug.