summaryrefslogtreecommitdiff
path: root/src/lj_crecord.c
diff options
context:
space:
mode:
authorMike Pall <mike>2011-01-29 19:47:37 +0100
committerMike Pall <mike>2011-01-29 19:47:37 +0100
commit992bc2caa3d84dc9a6beafe3c52c982e01aaa524 (patch)
tree90b4bbd80650732e1bcaba564e9be9421ad81b9f /src/lj_crecord.c
parent6fd721ce7294c0ceba0d0d49a79e59801427ba8d (diff)
downloadluajit-992bc2caa3d84dc9a6beafe3c52c982e01aaa524.tar.gz
luajit-992bc2caa3d84dc9a6beafe3c52c982e01aaa524.tar.bz2
luajit-992bc2caa3d84dc9a6beafe3c52c982e01aaa524.zip
FFI: Limit index range for complex numbers.
Diffstat (limited to 'src/lj_crecord.c')
-rw-r--r--src/lj_crecord.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/lj_crecord.c b/src/lj_crecord.c
index 86e95679..61210907 100644
--- a/src/lj_crecord.c
+++ b/src/lj_crecord.c
@@ -483,7 +483,10 @@ void LJ_FASTCALL recff_cdata_index(jit_State *J, RecordFFData *rd)
483#endif 483#endif
484 integer_key: 484 integer_key:
485 if (ctype_ispointer(ct->info)) { 485 if (ctype_ispointer(ct->info)) {
486 CTSize sz = lj_ctype_size(cts, (sid = ctype_cid(ct->info))); 486 CTSize sz;
487 if ((ct->info & CTF_COMPLEX))
488 idx = emitir(IRT(IR_BAND, IRT_INTP), idx, lj_ir_kintp(J, 1));
489 sz = lj_ctype_size(cts, (sid = ctype_cid(ct->info)));
487 idx = crec_reassoc_ofs(J, idx, &ofs, sz); 490 idx = crec_reassoc_ofs(J, idx, &ofs, sz);
488 idx = emitir(IRT(IR_MUL, IRT_INTP), idx, lj_ir_kintp(J, sz)); 491 idx = emitir(IRT(IR_MUL, IRT_INTP), idx, lj_ir_kintp(J, sz));
489 ptr = emitir(IRT(IR_ADD, IRT_PTR), idx, ptr); 492 ptr = emitir(IRT(IR_ADD, IRT_PTR), idx, ptr);