Closed
Bug 122463
Opened 23 years ago
Closed 23 years ago
xptiInterfaceInfo.cpp: Returning NS_OK when a failure occurs
Categories
(Core :: XPCOM, defect)
Tracking
()
VERIFIED
DUPLICATE
of bug 121118
People
(Reporter: morse, Assigned: dbradley)
Details
This is an offshoot of bug 113519
The following code in xptiInterfaceInfo.cpp::GetEntryForParam is returning NS_OK
when an error has occurred.
NS_ASSERTION(theEntry, "bad state");
*entry = theEntry;
return NS_OK;
So even though we know that theEntry is incorrect (null), we go ahead and assign
it to entry and return an NS_OK status. The caller, GetIIDForParamNoAlloc,
immediately dereferences entry and will crash.
The fix is to modify the above to read
NS_ASSERTION(theEntry, "bad state");
if (!theEntry) {
return NS_ERROR_FAILURE;
}
*entry = theEntry;
return NS_OK;
Assigning to XPCOM but I'm not sure whether or not that's the correct component.
Dissent. Don't paper over whatever bug is being tickled by your cookie-IDL
patch, find out what it is and fix it right (assuming it's not just corrupt or
otherwise mis-built typelibs), at the source. This routine gets called, I would
guess, hundreds of thousands of times during a typical Mozilla run, and yet we
have never needed that check before!
Unless we can see that there are otherwise-correct operations of the libraries
in question that result in a null pointer coming through here, I don't think we
want this sort of "bullet-proofing".
Comment 2•23 years ago
|
||
But why was that unexpected condition occurring? Is there something incoherent
in your build? What happens if you remove xpti.dat?
/be
Assignee: dougt → dbradley
Reporter | ||
Comment 3•23 years ago
|
||
Removing xpti.dat makes no difference -- it simply gets rebuilt again and the
same assertion/crash occurs.
Comment 4•23 years ago
|
||
This is a dup. Waiting on review.
If you are hitting that problem then you are trying to *use* an interface info
that does not exist. It would be good to know what info that is and what code is
trying to use it. You may well need to fully declare an interface that is only
forward declared or ship an xpt file that is not being shipped.
The only reason *I* ran into the problem was that I wrote an xpt decompiler that
iterated over all the interfaces and all their param types. But if you are seing
this in normal usage then there is another problem.
*** This bug has been marked as a duplicate of 12118 ***
Status: NEW → RESOLVED
Closed: 23 years ago
Resolution: --- → DUPLICATE
Comment 5•23 years ago
|
||
reopenning to set this as a dup of the *correct* bug.
Status: RESOLVED → REOPENED
Resolution: DUPLICATE → ---
Comment 6•23 years ago
|
||
dropped a digit on the bug number...
*** This bug has been marked as a duplicate of 121118 ***
Status: REOPENED → RESOLVED
Closed: 23 years ago → 23 years ago
Resolution: --- → DUPLICATE
You need to log in
before you can comment on or make changes to this bug.
Description
•