From 0791f28ac60b8d8541764e480a87cd6bbdc3332b Mon Sep 17 00:00:00 2001 From: Nik <njunger@uwaterloo.ca> Date: Tue, 4 Dec 2018 23:10:31 -0500 Subject: [PATCH] Fixed memory corruption for non-default randomness --- gmp_big.go | 17 ++++++++++++++--- rand_hook.c | 2 +- utils.go | 4 ++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/gmp_big.go b/gmp_big.go index 555fc5d..8640831 100644 --- a/gmp_big.go +++ b/gmp_big.go @@ -23,6 +23,17 @@ package pbc /* #include <gmp.h> +#include <stdlib.h> + +mpz_t* newMpzT() { + mpz_t* x = malloc(sizeof(mpz_t)); + mpz_init(*x); + return x; +} +void freeMpzT(mpz_t* x) { + mpz_clear(*x); + free(x); +} */ import "C" @@ -33,19 +44,19 @@ import ( ) type mpz struct { - i C.mpz_t + i *C.mpz_t } var wordSize C.size_t var bitsPerWord C.size_t func clearMpz(x *mpz) { - C.mpz_clear(&x.i[0]) + C.freeMpzT(x.i) } func newMpz() *mpz { out := &mpz{} - C.mpz_init(&out.i[0]) + out.i = C.newMpzT() runtime.SetFinalizer(out, clearMpz) return out } diff --git a/rand_hook.c b/rand_hook.c index f0d3a42..228d8c0 100644 --- a/rand_hook.c +++ b/rand_hook.c @@ -26,7 +26,7 @@ void pbc_init_random(); void goRandomHook(mpz_t out, mpz_t limit, void* data) { UNUSED_VAR(data); - goGenerateRandom(out, limit); + goGenerateRandom(&out, &limit); } void installRandomHook() { diff --git a/utils.go b/utils.go index 1af0252..2f36c1d 100644 --- a/utils.go +++ b/utils.go @@ -81,8 +81,8 @@ func SetRandomProvider(provider RandomSource) { //export goGenerateRandom func goGenerateRandom(out, limit unsafe.Pointer) { - outMpz := &mpz{i: *(*C.mpz_t)(out)} - limitMpz := &mpz{i: *(*C.mpz_t)(limit)} + outMpz := &mpz{i: *(**C.mpz_t)(out)} + limitMpz := &mpz{i: *(**C.mpz_t)(limit)} r := randomProvider.Rand(mpz2big(limitMpz)) big2thisMpz(r, outMpz) } -- GitLab