Closed Bug 10560 Opened 27 years ago Closed 27 years ago

NECKO: bad URL construction in www.foo.com

Categories

(Core :: Networking, defect, P3)

All
Windows NT
defect

Tracking

()

VERIFIED FIXED

People

(Reporter: warrensomebody, Assigned: gagan)

References

()

Details

(Whiteboard: asked reporter to verify)

Gagan, If I type www.foo.com into the location bar, I assert here: nsDebug::Assertion(const char * 0x00c86044, const char * 0x00c8603c, const char * 0x00c86010, int 782) line 176 + 13 bytes nsStdURL::ParsePath() line 782 + 32 bytes nsParsePath::~nsParsePath() line 45 + 27 bytes nsStdURL::SetFileName(nsStdURL * const 0x0a0f0870, char * 0x0a0f5030) line 649 + 46 bytes nsStdURL::SetRelativePath(nsStdURL * const 0x0a0f0870, const char * 0x0a0f5030) line 697 + 16 bytes nsHTTPHandler::NewURI(nsHTTPHandler * const 0x0a07dba0, const char * 0x0a0f5030, nsIURI * 0x0a160400, nsIURI * * 0x0012e1b0) line 231 + 16 bytes nsHTTPHandler::MakeAbsolute(nsHTTPHandler * const 0x0a07dba0, const char * 0x0a0f5030, nsIURI * 0x0a160400, char * * 0x0012e23c) line 211 + 24 bytes nsIOService::MakeAbsolute(nsIOService * const 0x00aabe30, const char * 0x0a0f5030, nsIURI * 0x0a160400, char * * 0x0012e23c) line 275 + 35 bytes NS_MakeAbsoluteURI(const char * 0x0a0f5030, nsIURI * 0x0a160400, char * * 0x0012e23c) line 108 + 24 bytes NS_MakeAbsoluteURI(const nsString & {"index.html"}, nsIURI * 0x0a160400, nsString & {""}) line 119 + 17 bytes SelectorMatches(nsIPresContext * 0x0a163de0, nsCSSSelector * 0x00b2e6e8, nsIContent * 0x0a0d3f3c, int 1) line 1484 + 26 bytes ContentEnumFunc(nsICSSStyleRule * 0x00b2e6dc, void * 0x0012e468) line 1605 + 24 bytes RuleHash::EnumerateAllRules(nsIAtom * 0x00b2d100 {"a"}, nsIAtom * 0x00000000 {???}, const nsVoidArray & {...}, void (nsICSSStyleRule *, void *)* 0x015edbf0 ContentEnumFunc(nsICSSStyleRule *, void *), void * 0x0012e468) line 318 + 13 bytes CSSStyleSheetImpl::RulesMatching(nsIPresContext * 0x0a163de0, nsIContent * 0x0a0d3f3c, nsIStyleContext * 0x0a0f0a60, nsISupportsArray * 0x0a0f08e0) line 1664 EnumRulesMatching(nsISupports * 0x00b26520, void * 0x0012e504) line 424 + 38 bytes nsSupportsArray::EnumerateBackwards(nsSupportsArray * const 0x0a0cf960, int (nsISupports *, void *)* 0x01527d80 EnumRulesMatching(nsISupports *, void *), void * 0x0012e504) line 360 + 20 bytes StyleSetImpl::ResolveStyleFor(nsIPresContext * 0x0a163de0, nsIContent * 0x0a0d3f3c, nsIStyleContext * 0x0a0f0a60, int 0) line 535 nsPresContext::ResolveStyleContextFor(nsPresContext * const 0x0a163de0, nsIContent * 0x0a0d3f3c, nsIStyleContext * 0x0a0f0a60, int 0, nsIStyleContext * * 0x0012e5dc) line 393 + 38 bytes nsCSSFrameConstructor::ResolveStyleContext(nsIPresContext * 0x0a163de0, nsIFrame * 0x0a0f0930, nsIContent * 0x0a0d3f3c, nsIAtom * 0x00b2d100 {"a"}, nsIStyleContext * * 0x0012e5dc) line 3821 + 31 bytes nsCSSFrameConstructor::ConstructFrame(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d3f3c, nsIFrame * 0x0a0f0930, int 0, nsFrameItems & {...}) line 3844 + 53 bytes nsCSSFrameConstructor::ProcessChildren(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d3fbc, nsIFrame * 0x0a0f0930, int 1, nsFrameItems & {...}) line 766 nsCSSFrameConstructor::ConstructFrameByDisplayType(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, const nsStyleDisplay * 0x0a0f0c94, nsIContent * 0x0a0d3fbc, nsIFrame * 0x0a0f6d80, nsIStyleContext * 0x0a0f0a60, int 0, nsFrameItems & {...}) line 3636 + 36 bytes nsCSSFrameConstructor::ConstructFrame(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d3fbc, nsIFrame * 0x0a0f6d80, int 0, nsFrameItems & {...}) line 3880 + 45 bytes nsCSSFrameConstructor::ProcessChildren(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d3170, nsIFrame * 0x0a0f6d80, int 1, nsFrameItems & {...}) line 766 nsCSSFrameConstructor::ConstructTableCellFrameOnly(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d3170, nsIFrame * 0x0a0f7340, nsIStyleContext * 0x0a0f7060, nsIFrame * & 0x0a0f6e20, nsIFrame * & 0x0a0f6d80, nsTableCreator & {...}, int 1) line 1630 + 32 bytes nsCSSFrameConstructor::ConstructTableCellFrame(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d3170, nsIFrame * 0x0a0f7340, nsIStyleContext * 0x0a0f7060, nsIFrame * & 0x00000000, nsIFrame * & 0x0a0f6e20, nsIFrame * & 0x0a0f6d80, nsTableCreator & {...}, int 1) line 1553 + 49 bytes nsCSSFrameConstructor::ConstructFrameByDisplayType(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, const nsStyleDisplay * 0x0a0f7294, nsIContent * 0x0a0d3170, nsIFrame * 0x0a0f7340, nsIStyleContext * 0x0a0f7060, int 0, nsFrameItems & {...}) line 3604 + 55 bytes nsCSSFrameConstructor::ConstructFrame(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d3170, nsIFrame * 0x0a0f7340, int 0, nsFrameItems & {...}) line 3880 + 45 bytes nsCSSFrameConstructor::TableProcessChild(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d3170, nsIFrame * 0x0a0f7340, nsIStyleContext * 0x0a0f5070, nsFrameItems & {...}, nsTableCreator & {...}) line 1703 + 30 bytes nsCSSFrameConstructor::TableProcessChildren(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d31ec, nsIFrame * 0x0a0f7340, nsFrameItems & {...}, nsTableCreator & {...}) line 1677 + 46 bytes nsCSSFrameConstructor::ConstructTableRowFrameOnly(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d31ec, nsIFrame * 0x0a0f53a0, nsIStyleContext * 0x0a0f5070, int 1, nsIFrame * & 0x0a0f7340, nsTableCreator & {...}) line 1443 + 34 bytes nsCSSFrameConstructor::ConstructTableRowFrame(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d31ec, nsIFrame * 0x0a0f53a0, nsIStyleContext * 0x0a0f5070, nsIFrame * & 0x00000000, nsIFrame * & 0x0a0f7340, nsTableCreator & {...}, nsTableList * 0x00000000) line 1392 + 45 bytes nsCSSFrameConstructor::ConstructFrameByDisplayType(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, const nsStyleDisplay * 0x0a0f52a4, nsIContent * 0x0a0d31ec, nsIFrame * 0x0a0f53a0, nsIStyleContext * 0x0a0f5070, int 0, nsFrameItems & {...}) line 3596 + 48 bytes nsCSSFrameConstructor::ConstructFrame(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d31ec, nsIFrame * 0x0a0f53a0, int 0, nsFrameItems & {...}) line 3880 + 45 bytes nsCSSFrameConstructor::TableProcessChild(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d31ec, nsIFrame * 0x0a0f53a0, nsIStyleContext * 0x0a0f54b0, nsFrameItems & {...}, nsTableCreator & {...}) line 1703 + 30 bytes nsCSSFrameConstructor::TableProcessChildren(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d36ec, nsIFrame * 0x0a0f53a0, nsFrameItems & {...}, nsTableCreator & {...}) line 1677 + 46 bytes nsCSSFrameConstructor::ConstructTableGroupFrameOnly(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d36ec, nsIFrame * 0x0a0f5a40, nsIStyleContext * 0x0a0f54b0, int 1, nsIFrame * & 0x0a0f53a0, nsIFrame * & 0x0a0f53a0, nsTableCreator & {...}, int 1) line 1345 nsCSSFrameConstructor::ConstructTableGroupFrame(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d36ec, nsIFrame * 0x0a0f5a40, nsIStyleContext * 0x0a0f54b0, int 1, nsIFrame * & 0x0a0f53a0, nsIFrame * & 0x0a0f53a0, nsTableCreator & {...}, nsTableList * 0x00000000) line 1227 + 53 bytes nsCSSFrameConstructor::ConstructTableFrame(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d303c, nsIFrame * 0x0a0f2040, nsIStyleContext * 0x0a0f5c60, nsIFrame * & 0x0a0f5b40, nsTableCreator & {...}) line 938 + 56 bytes nsCSSFrameConstructor::ConstructFrameByDisplayType(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, const nsStyleDisplay * 0x0a0f5e94, nsIContent * 0x0a0d303c, nsIFrame * 0x0a0f2040, nsIStyleContext * 0x0a0f5c60, int 0, nsFrameItems & {...}) line 3560 + 42 bytes nsCSSFrameConstructor::ConstructFrame(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0d303c, nsIFrame * 0x0a0f2040, int 0, nsFrameItems & {...}) line 3880 + 45 bytes nsCSSFrameConstructor::ProcessChildren(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0cc2a0, nsIFrame * 0x0a0f2040, int 1, nsFrameItems & {...}) line 766 nsCSSFrameConstructor::ConstructTableCellFrameOnly(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0cc2a0, nsIFrame * 0x0a0f21d0, nsIStyleContext * 0x0a0f4d40, nsIFrame * & 0x0a0f4c30, nsIFrame * & 0x0a0f2040, nsTableCreator & {...}, int 1) line 1630 + 32 bytes nsCSSFrameConstructor::ConstructTableCellFrame(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0cc2a0, nsIFrame * 0x0a0f21d0, nsIStyleContext * 0x0a0f4d40, nsIFrame * & 0x00000000, nsIFrame * & 0x0a0f4c30, nsIFrame * & 0x0a0f2040, nsTableCreator & {...}, int 1) line 1553 + 49 bytes nsCSSFrameConstructor::ConstructFrameByDisplayType(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, const nsStyleDisplay * 0x0a0f4f74, nsIContent * 0x0a0cc2a0, nsIFrame * 0x0a0f21d0, nsIStyleContext * 0x0a0f4d40, int 0, nsFrameItems & {...}) line 3604 + 55 bytes nsCSSFrameConstructor::ConstructFrame(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0cc2a0, nsIFrame * 0x0a0f21d0, int 0, nsFrameItems & {...}) line 3880 + 45 bytes nsCSSFrameConstructor::TableProcessChild(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0cc2a0, nsIFrame * 0x0a0f21d0, nsIStyleContext * 0x0a0f2350, nsFrameItems & {...}, nsTableCreator & {...}) line 1703 + 30 bytes nsCSSFrameConstructor::TableProcessChildren(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0cc31c, nsIFrame * 0x0a0f21d0, nsFrameItems & {...}, nsTableCreator & {...}) line 1677 + 46 bytes nsCSSFrameConstructor::ConstructTableRowFrameOnly(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0cc31c, nsIFrame * 0x0a0f2680, nsIStyleContext * 0x0a0f2350, int 1, nsIFrame * & 0x0a0f21d0, nsTableCreator & {...}) line 1443 + 34 bytes nsCSSFrameConstructor::ConstructTableRowFrame(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0cc31c, nsIFrame * 0x0a0f2680, nsIStyleContext * 0x0a0f2350, nsIFrame * & 0x00000000, nsIFrame * & 0x0a0f21d0, nsTableCreator & {...}, nsTableList * 0x00000000) line 1392 + 45 bytes nsCSSFrameConstructor::ConstructFrameByDisplayType(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, const nsStyleDisplay * 0x0a0f2584, nsIContent * 0x0a0cc31c, nsIFrame * 0x0a0f2680, nsIStyleContext * 0x0a0f2350, int 0, nsFrameItems & {...}) line 3596 + 48 bytes nsCSSFrameConstructor::ConstructFrame(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0cc31c, nsIFrame * 0x0a0f2680, int 0, nsFrameItems & {...}) line 3880 + 45 bytes nsCSSFrameConstructor::TableProcessChild(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0cc31c, nsIFrame * 0x0a0f2680, nsIStyleContext * 0x0a0f30f0, nsFrameItems & {...}, nsTableCreator & {...}) line 1703 + 30 bytes nsCSSFrameConstructor::TableProcessChildren(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0cc39c, nsIFrame * 0x0a0f2680, nsFrameItems & {...}, nsTableCreator & {...}) line 1677 + 46 bytes nsCSSFrameConstructor::ConstructTableGroupFrameOnly(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0cc39c, nsIFrame * 0x0a0f3680, nsIStyleContext * 0x0a0f30f0, int 1, nsIFrame * & 0x0a0f2680, nsIFrame * & 0x0a0f2680, nsTableCreator & {...}, int 1) line 1345 nsCSSFrameConstructor::ConstructTableGroupFrame(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0cc39c, nsIFrame * 0x0a0f3680, nsIStyleContext * 0x0a0f30f0, int 1, nsIFrame * & 0x0a0f2680, nsIFrame * & 0x0a0f2680, nsTableCreator & {...}, nsTableList * 0x00000000) line 1227 + 53 bytes nsCSSFrameConstructor::ConstructTableFrame(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0cc62c, nsIFrame * 0x0a0c9570, nsIStyleContext * 0x0a0f3780, nsIFrame * & 0x0a0f7510, nsTableCreator & {...}) line 938 + 56 bytes nsCSSFrameConstructor::ConstructFrameByDisplayType(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, const nsStyleDisplay * 0x0a0f39b4, nsIContent * 0x0a0cc62c, nsIFrame * 0x0a0c9570, nsIStyleContext * 0x0a0f3780, int 0, nsFrameItems & {...}) line 3560 + 42 bytes nsCSSFrameConstructor::ConstructFrame(nsIPresContext * 0x0a163de0, nsFrameConstructorState & {...}, nsIContent * 0x0a0cc62c, nsIFrame * 0x0a0c9570, int 0, nsFrameItems & {...}) line 3880 + 45 bytes nsCSSFrameConstructor::ContentAppended(nsCSSFrameConstructor * const 0x0a0cf9b0, nsIPresContext * 0x0a163de0, nsIContent * 0x0a0cd31c, int 0) line 4193 StyleSetImpl::ContentAppended(StyleSetImpl * const 0x0a0cfa50, nsIPresContext * 0x0a163de0, nsIContent * 0x0a0cd31c, int 0) line 789 PresShell::ContentAppended(PresShell * const 0x0a0cf8c8, nsIDocument * 0x0a1615c0, nsIContent * 0x0a0cd31c, int 0) line 1847 + 46 bytes nsDocument::ContentAppended(nsDocument * const 0x0a1615c0, nsIContent * 0x0a0cd31c, int 0) line 1566 nsHTMLDocument::ContentAppended(nsHTMLDocument * const 0x0a1615c0, nsIContent * 0x0a0cd31c, int 0) line 841 HTMLContentSink::NotifyBody() line 276 HTMLContentSink::CloseBody(HTMLContentSink * const 0x0a162c50, const nsIParserNode & {...}) line 1947 CNavDTD::CloseBody(const nsIParserNode & {...}) line 2299 + 31 bytes CNavDTD::CloseContainer(const nsIParserNode & {...}, nsHTMLTag eHTMLTag_body, int 0) line 2535 + 12 bytes CNavDTD::CloseContainersTo(int 1, nsHTMLTag eHTMLTag_body, int 0) line 2582 + 26 bytes CNavDTD::CloseContainersTo(nsHTMLTag eHTMLTag_body, int 0) line 2604 + 20 bytes CNavDTD::DidBuildModel(CNavDTD * const 0x0a0cf190, unsigned int 0, int 1, nsIParser * 0x0a162da0, nsIContentSink * 0x0a162c50) line 596 nsParser::DidBuildModel(unsigned int 0) line 525 + 55 bytes nsParser::ResumeParse(nsIDTD * 0x00000000, int 1) line 893 nsParser::OnStopRequest(nsParser * const 0x0a162da4, nsIChannel * 0x0a160170, nsISupports * 0x00000000, unsigned int 0, const unsigned short * 0x00000000) line 1186 + 19 bytes nsDocumentBindInfo::OnStopRequest(nsDocumentBindInfo * const 0x0a13d8a0, nsIChannel * 0x0a160170, nsISupports * 0x00000000, unsigned int 0, const unsigned short * 0x00000000) line 2147 + 34 bytes nsHTTPResponseListener::OnStopRequest(nsHTTPResponseListener * const 0x0a160c90, nsIChannel * 0x0a161cc0, nsISupports * 0x0a160170, unsigned int 0, const unsigned short * 0x00000000) line 216 + 45 bytes nsOnStopRequestEvent::HandleEvent(nsOnStopRequestEvent * const 0x0a0e3d80) line 284 nsStreamListenerEvent::HandlePLEvent(PLEvent * 0x0a0e3d84) line 149 + 12 bytes PL_HandleEvent(PLEvent * 0x0a0e3d84) line 509 + 10 bytes PL_ProcessPendingEvents(PLEventQueue * 0x00a58410) line 470 + 9 bytes _md_EventReceiverProc(HWND__ * 0x005f10e6, unsigned int 49328, unsigned int 0, long 10847248) line 932 + 9 bytes USER32! 77e71250() The problem seems to be that SetRelativePath is doing the wrong thing -- I see www.foo.com get rewritten as www.foo.com/ and then as www.foo.com/index.html. However, somewhere along the line, your URL code makes a URL containing www.foo.comindex.html (no slash). Furthermore, your nsStdURL code needs to be fixed in several other ways too: - Several constructors call nsCRT::strdup in them which can fail. Although you've attempted to handle the failure by returning nsnull, this is not a real solution. You need to convert these into Init routines that can return NS_ERROR_OUT_OF_MEMORY. - You haven't implemented the aggregation stuff. Basically, you need to pass the outer parameter down from the factory method into your constructor so that you can pass it to NS_INIT_AGGREGATED. Perhaps we should get together to have a code review of this stuff before too long. Warren
One more... ReconstructPath should be called lazily. There's no need to do that for every assignment. You should just construct the full string on GetSpec and don't bother to cache it.
Status: NEW → ASSIGNED
Status: ASSIGNED → RESOLVED
Closed: 27 years ago
Resolution: --- → FIXED
This should be fixed with my latest checkins. Pl. repull netwerk/base/src/nsStdURL.cpp and check.
Whiteboard: asked reporter to verify
warren, would you like to verify that all your little suggestions are in?
Status: RESOLVED → VERIFIED
I'll reopen another bug for them.
Bulk move of all Necko (to be deleted component) bugs to new Networking component.
You need to log in before you can comment on or make changes to this bug.