summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2017-05-28 06:29:50 +0000
committerKaz Kylheku <kaz@kylheku.com>2017-05-28 06:29:50 +0000
commitb5353cc4c726e60f05df3655859c096e03458e5e (patch)
tree4dde0b16288284568e0113290157c08986a64484
parent2f84e75de54b333fd1930c50c421d9369e30bdb6 (diff)
downloadtxr-b5353cc4c726e60f05df3655859c096e03458e5e.tar.gz
txr-b5353cc4c726e60f05df3655859c096e03458e5e.tar.bz2
txr-b5353cc4c726e60f05df3655859c096e03458e5e.zip
ffi: bugfix: null out return value to padded size.
* ffi.c (ffi_closure_dispatch_safe): In the abort case when we put zeros in the return value, we must overwrite the entire ffi_arg cell, in adherence with the special return value quirk of libffi.
-rw-r--r--ffi.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/ffi.c b/ffi.c
index f2154e13..e6d22814 100644
--- a/ffi.c
+++ b/ffi.c
@@ -2800,7 +2800,7 @@ static void ffi_closure_dispatch_safe(ffi_cif *cif, void *cret,
if (rtft->release != 0 && retval != nao)
rtft->release(rtft, retval, convert(mem_t *, cret));
if (!tfcl->abort_retval)
- memset(cret, 0, rtft->size);
+ memset(cret, 0, pad_retval(rtft->size));
else
ifbe2(rtft->rput, rtft->put)(rtft, tfcl->abort_retval,
convert(mem_t *, cret), self);