diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2014-07-27 09:54:41 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2014-07-27 09:54:41 -0700 |
commit | 1b20769e5245165e9643a96407f27332569c17c7 (patch) | |
tree | b2d4713abcba86bb577eb8d462993594c4e3e5ee /lib.c | |
parent | a78684b08ea0669262156c78e9b8eb4bc68e8139 (diff) | |
download | txr-1b20769e5245165e9643a96407f27332569c17c7.tar.gz txr-1b20769e5245165e9643a96407f27332569c17c7.tar.bz2 txr-1b20769e5245165e9643a96407f27332569c17c7.zip |
Fix 2014-02-05 safety regression: unchecked use of non-function objects
in some contexts that require functions.
* lib.c (funcall, funcall1, funcall2, funcall3, funcall4):
check type(fun) before dereferencing to see whether there
are optional args.
Diffstat (limited to 'lib.c')
-rw-r--r-- | lib.c | 10 |
1 files changed, 5 insertions, 5 deletions
@@ -3726,7 +3726,7 @@ val generic_funcall(val fun, val arg[], int nargs) val funcall(val fun) { - if (fun->f.optargs || type(fun) != FUN) { + if (type(fun) != FUN || fun->f.optargs) { val arg[32] = { nil }; return generic_funcall(fun, arg, 0); } @@ -3757,7 +3757,7 @@ val funcall(val fun) val funcall1(val fun, val arg) { - if (fun->f.optargs || type(fun) != FUN) { + if (type(fun) != FUN || fun->f.optargs) { val args[32]; args[0] = arg; return generic_funcall(fun, args, 1); @@ -3793,7 +3793,7 @@ val funcall1(val fun, val arg) val funcall2(val fun, val arg1, val arg2) { - if (fun->f.optargs || type(fun) != FUN) { + if (type(fun) != FUN || fun->f.optargs) { val arg[32]; arg[0] = arg1; arg[1] = arg2; @@ -3835,7 +3835,7 @@ val funcall2(val fun, val arg1, val arg2) val funcall3(val fun, val arg1, val arg2, val arg3) { - if (fun->f.optargs || type(fun) != FUN) { + if (type(fun) != FUN || fun->f.optargs) { val arg[32]; arg[0] = arg1; arg[1] = arg2; @@ -3882,7 +3882,7 @@ val funcall3(val fun, val arg1, val arg2, val arg3) val funcall4(val fun, val arg1, val arg2, val arg3, val arg4) { - if (fun->f.optargs || type(fun) != FUN) { + if (type(fun) != FUN || fun->f.optargs) { val arg[32]; arg[0] = arg1; arg[1] = arg2; |