Closed
Bug 297665
Opened 21 years ago
Closed 21 years ago
Incompatibility check is not performed when downgrading from 1.0+ to 1.0
Categories
(Toolkit :: Add-ons Manager, defect)
Tracking
()
RESOLVED
INVALID
People
(Reporter: mgueury, Unassigned)
References
()
Details
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8b2) Gecko/20050527 Firefox/1.0+
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8b2) Gecko/20050527 Firefox/1.0+
It is the detail of bug 295950. Problem 4 with a step-by-step testcase.
This problem is about upgrade of an extension and then downgrade of Firefox.
Causing a error at startup:
XPCOM:EventReceiver:firefox.exe - Entry Point Not Found
The procedure entry point NS_Alloc could not be located in the dynamic library
xpcom.dll
Reproducible: Always
Steps to Reproduce:
0. Have Firefox 1.0.4 and Firefox 1.0+ (1.1 beta) installed on your machine
1. Make sure that the both works fine and that the HTML Validator extension
is not installed.
-> check that the extension in not in 1.0
-> check that the extension in not in 1.1
2. In 1.0, install the extension for 1.0 (maxversion=0.8) (minversion=1.0)
I can not upload the files there are too big. So, here is a link where
you can find them.
> http://users.skynet.be/mgueury/mozilla/download.html
And a direct link to the XPI
> http://htmlvalidator.sourceforge.net/mozilla/tidy_firefox_win_060.xpi
(min 0.8/max 1.0)
3. When the extension is installed, restart Firefox 1.0. It works fine.
4. Stop Firefox 1.0, start 1.1.
5. Install the extension for 1.1.
> http://htmlvalidator.sourceforge.net/mozilla/tidy_firefox_11_win_060.xpi
(min 1.0+/max 1.0+)
6. When the extension is installed, restart Firefox 1.1. It works fine.
7. Stop Firefox 1.1 and restart firefox 1.0
XPCOM:EventReceiver:firefox.exe - Entry Point Not Found
The procedure entry point NS_Alloc could not be located in the dynamic library
xpcom.dll
Actual Results:
An error
Expected Results:
The extension should be disabled
Comment 1•21 years ago
|
||
This occurs when downgrading from 1.0+ to 1.0 in that an incompatibility check
is not performed and extensions. This doesn't appear to affect 1.0+ - only 1.0
after downgrading from 1.0+
The "error NS_Alloc" from the original summary I believe is due to using an
unfrozen interface and is to be expected when using interfaces that haven't been
frozen.
Status: UNCONFIRMED → NEW
Ever confirmed: true
Summary: Upgrade of an extension to 1.1: error NS_Alloc when going back to 1.0 → Incompatibility check is not performed when downgrading from 1.0+ to 1.0
Version: unspecified → 1.0 Branch
Comment 2•21 years ago
|
||
Note: using the new capabilities provided by bug 253742 you may be able to work
around the NS_Alloc error.
I have found some idea about the cause of this
1) My XPCOM class is declared like this in the IDL file
[...]
interface nsITidy : nsISupports
{
[...]
What translate in the class definition of the implementation to
[...]
class nsTidyImpl : public nsITidy
{
public:
nsTidyImpl();
NS_DECL_ISUPPORTS
NS_DECL_NSITIDY
[...]
2) In the C class implementation I use this macro to define the ISUPORT
interface:
[...]
NS_IMPL_ISUPPORTS1_CI(nsTidyImpl, nsITidy)
[...]
This macro is define in nsSupportImpl.h like this:
[...]
#define MY_NS_IMPL_ISUPPORTS1_CI(_class, _interface) \
MY_NS_IMPL_ADDREF(_class) \
NS_IMPL_RELEASE(_class) \
NS_IMPL_QUERY_INTERFACE1_CI(_class, _interface) \
NS_IMPL_CI_INTERFACE_GETTER1(_class, _interface)
[...]
The NS_IMPL_CI_INTERFACE_GETTER1 is defined as :
[...]
#define NS_IMPL_CI_INTERFACE_GETTER1(_class, _interface) \
NS_CLASSINFO_HELPER_BEGIN(_class, 1) \
NS_CLASSINFO_HELPER_ENTRY(0, _interface) \
NS_CLASSINFO_HELPER_END
[...]
The definition below contains the code to the unfrozen API. But it is
not contained in my code. Simply in NS_IMPL_ISUPPORTS1_CI
[...]
#define NS_CLASSINFO_HELPER_BEGIN(_class, _c) \
NS_IMETHODIMP \
NS_CI_INTERFACE_GETTER_NAME(_class)(PRUint32 *count, nsIID ***array) \
{ \
*count = _c; \
*array = (nsIID **)nsMemory::Alloc(sizeof (nsIID *) * _c);
#define NS_CLASSINFO_HELPER_ENTRY(_i, _interface) \
(*array)[_i] = (nsIID *)nsMemory::Clone(&NS_GET_IID(_interface), \
sizeof(nsIID));
#define NS_CLASSINFO_HELPER_END \
return NS_OK; \
}
[...]
Please notice the call to nsMemory::Clone and nsMemory:Alloc
Comment 4•21 years ago
|
||
nsMemory::Close and nsMemory::Alloc are symbols provided by the xpcom glue. If
you are linking against xpcomglue_s.lib you should not have this problem.
:)
That was it. Just a small xpcomglue lib that was not linked with the .DLL/.SO.
Now the 1.0 library works in 1.1 too. And it solves all my 1.1 concerns.
I tested on Windows and Linux with success.
Thanks a lot !
Marc
Status: NEW → RESOLVED
Closed: 21 years ago
Resolution: --- → FIXED
Updated•21 years ago
|
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
Updated•21 years ago
|
Status: REOPENED → RESOLVED
Closed: 21 years ago → 21 years ago
Resolution: --- → INVALID
| Assignee | ||
Updated•18 years ago
|
Product: Firefox → Toolkit
You need to log in
before you can comment on or make changes to this bug.
Description
•