summaryrefslogtreecommitdiffstats
path: root/js/xpconnect/src/ExportHelpers.cpp
diff options
context:
space:
mode:
authorNew Tobin Paradigm <email@mattatobin.com>2018-04-17 14:58:10 -0400
committerGitHub <noreply@github.com>2018-04-17 14:58:10 -0400
commit29de8de78c3260aad1e7844933d5b3cf1033627c (patch)
tree790b4fc76ccd49500422faf08f6438409aa1ddbf /js/xpconnect/src/ExportHelpers.cpp
parent9fb0fef0d2020d8890162548264e226e5d55033e (diff)
parent287ca21a651803ce87347ba584ce93908cd8a9e6 (diff)
downloadUXP-29de8de78c3260aad1e7844933d5b3cf1033627c.tar
UXP-29de8de78c3260aad1e7844933d5b3cf1033627c.tar.gz
UXP-29de8de78c3260aad1e7844933d5b3cf1033627c.tar.lz
UXP-29de8de78c3260aad1e7844933d5b3cf1033627c.tar.xz
UXP-29de8de78c3260aad1e7844933d5b3cf1033627c.zip
Merge pull request #168 from janekptacijarabaci/xpcom_exportFunction_length_1
moebius#242: XPCOM: exportFunction() - fix wrong .length attribute
Diffstat (limited to 'js/xpconnect/src/ExportHelpers.cpp')
-rw-r--r--js/xpconnect/src/ExportHelpers.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/js/xpconnect/src/ExportHelpers.cpp b/js/xpconnect/src/ExportHelpers.cpp
index 3dbf83e3b..e574e708c 100644
--- a/js/xpconnect/src/ExportHelpers.cpp
+++ b/js/xpconnect/src/ExportHelpers.cpp
@@ -329,11 +329,20 @@ NewFunctionForwarder(JSContext* cx, HandleId idArg, HandleObject callable,
if (id == JSID_VOIDHANDLE)
id = GetJSIDByIndex(cx, XPCJSContext::IDX_EMPTYSTRING);
+ // If our callable is a (possibly wrapped) function, we can give
+ // the exported thing the right number of args.
+ unsigned nargs = 0;
+ RootedObject unwrapped(cx, js::UncheckedUnwrap(callable));
+ if (unwrapped) {
+ if (JSFunction* fun = JS_GetObjectFunction(unwrapped))
+ nargs = JS_GetFunctionArity(fun);
+ }
+
// We have no way of knowing whether the underlying function wants to be a
// constructor or not, so we just mark all forwarders as constructors, and
// let the underlying function throw for construct calls if it wants.
JSFunction* fun = js::NewFunctionByIdWithReserved(cx, FunctionForwarder,
- 0, JSFUN_CONSTRUCTOR, id);
+ nargs, JSFUN_CONSTRUCTOR, id);
if (!fun)
return false;