Closed
Bug 43351
Opened 24 years ago
Closed 24 years ago
Potential null ptr deref in nsNativeComponentLoader.cpp
Categories
(Core :: XPCOM, defect, P3)
Tracking
()
RESOLVED
FIXED
M18
People
(Reporter: madams, Assigned: rayw)
References
Details
(Whiteboard: [nsbeta3+])
If the Unload() function of nsNativeComponentLoader is called when Init() hasn't
been (eg, if startup fails for some reason), this will crash due to mDllStore
being NULL.
Patch:
----------------------------------------
Index: nsNativeComponentLoader.cpp
===================================================================
RCS file: /cvsroot/mozilla/xpcom/components/nsNativeComponentLoader.cpp,v
retrieving revision 1.45
diff -u -r1.45 nsNativeComponentLoader.cpp
--- nsNativeComponentLoader.cpp 2000/06/03 09:45:55 1.45
+++ nsNativeComponentLoader.cpp 2000/06/21 20:25:04
@@ -982,7 +982,9 @@
callData.when = aWhen;
// Cycle through the dlls checking to see if they want to be unloaded
- mDllStore->Enumerate(nsFreeLibraryEnum, &callData);
+ if( mDllStore ) {
+ mDllStore->Enumerate(nsFreeLibraryEnum, &callData);
+ }
return NS_OK;
}
Updated•24 years ago
|
Status: UNCONFIRMED → NEW
Ever confirmed: true
Assignee | ||
Comment 1•24 years ago
|
||
Please explain why it is proper to call Unload without calling Init, and why it
would be bad for this to raise an exception.
Reporter | ||
Comment 2•24 years ago
|
||
This is hit if nsComponentManagerImpl::init() fails when called from
NS_InitXPCOM(). Here's the call sequence:
NS_InitXPCOM()
- compMgr = new nsComponentManagerImpl();
- rv = compMgr->Init();
- if (NS_FAILED(rv)) NS_RELEASE(compMgr);
- nsComponentManagerImpl())::~nsComponentManagerImpl()
- nsComponentManagerImpl()::Shutdown()
- nsComponentManagerImpl()::UnloadLibraries()
- nsNativeComponentLoader::UnloadAll()
- crash since nsNativeComponentLoader() never had Init() called, which
is normally called at the end of nsComponentManagerImpl::PlatformInit() (through
nsComponentManager::Init()) if everything succeeds
This was exposed by checking the return value of
nsComponentManagerImpl()::PlatformInit(). However, it would have happened later
anyways, just not as obviously.
Assignee | ||
Comment 3•24 years ago
|
||
Thanks for the clarification that Unload was not being externally called, but
only internally by the destructor.
I think this suggested change should be applied fairly soon. It apparently does
not prevent mozilla from executing correctly, but it creates a messy-looking
crash in a case where it would have failed anyway.
is the crash that occurs when the component registry is not writeable.
Target Milestone: --- → M18
Assignee | ||
Updated•24 years ago
|
Status: NEW → ASSIGNED
Assignee | ||
Updated•24 years ago
|
Assignee | ||
Updated•24 years ago
|
Whiteboard: [nsbeta3+]
Assignee | ||
Comment 4•24 years ago
|
||
Applied the patch, exactly as given.
Status: ASSIGNED → RESOLVED
Closed: 24 years ago
Resolution: --- → FIXED
Comment 5•24 years ago
|
||
please verify
Mark, please mark verified if all is well. Fixed for you?
QA Contact: leger → madams
You need to log in
before you can comment on or make changes to this bug.
Description
•