about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAymeric Vincent <aymeric.vincent@cea.fr>2015-11-23 16:57:54 +0100
committerAymeric Vincent <aymeric.vincent@cea.fr>2015-11-23 16:57:54 +0100
commitbdcd9113a9c1e4299ff534555e5283e21121ce29 (patch)
tree5a097a2f6b279e67fa91390f0366d56d0b2fff26
parent5690eb1551b3719f8fba61a2553e0720dd46667d (diff)
downloadmiasm-bdcd9113a9c1e4299ff534555e5283e21121ce29.tar.gz
miasm-bdcd9113a9c1e4299ff534555e5283e21121ce29.zip
When parsing a 64 bit integer, make sure we have enough room to store it.
Avoids crashes on 32 bit host architectures.
-rw-r--r--miasm2/jitter/Jitllvm.c8
-rw-r--r--miasm2/jitter/Jittcc.c16
2 files changed, 14 insertions, 10 deletions
diff --git a/miasm2/jitter/Jitllvm.c b/miasm2/jitter/Jitllvm.c
index ab077b05..6622e615 100644
--- a/miasm2/jitter/Jitllvm.c
+++ b/miasm2/jitter/Jitllvm.c
@@ -6,15 +6,17 @@
 
 PyObject* llvm_exec_bloc(PyObject* self, PyObject* args)
 {
+	uint64_t func_addr;
 	uint64_t (*func)(void*, void*);
 	uint64_t vm;
 	uint64_t cpu;
 	uint64_t ret;
 
-	if (!PyArg_ParseTuple(args, "KKK", &func, &cpu, &vm))
+	if (!PyArg_ParseTuple(args, "KKK", &func_addr, &cpu, &vm))
 		return NULL;
-	ret = func((void*)cpu, (void*)vm);
-	return PyLong_FromUnsignedLongLong( (uint64_t)ret);
+	func = (void *) (intptr_t) func_addr;
+	ret = func((void*)(intptr_t) cpu, (void*)(intptr_t) vm);
+	return PyLong_FromUnsignedLongLong(ret);
 }
 
 
diff --git a/miasm2/jitter/Jittcc.c b/miasm2/jitter/Jittcc.c
index a162c41b..201f9b7f 100644
--- a/miasm2/jitter/Jittcc.c
+++ b/miasm2/jitter/Jittcc.c
@@ -59,10 +59,12 @@ TCCState * tcc_init_state(void)
 
 PyObject* tcc_end(PyObject* self, PyObject* args)
 {
-	TCCState *tcc_state = NULL;
-	if (!PyArg_ParseTuple(args, "K", &tcc_state))
+	unsigned long long tmp = 0;
+
+	if (!PyArg_ParseTuple(args, "K", &tmp))
 		return NULL;
-	tcc_delete(tcc_state);
+
+	tcc_delete((TCCState *) (intptr_t) tmp);
 
 	Py_INCREF(Py_None);
 	return Py_None;
@@ -214,8 +216,8 @@ PyObject* tcc_compil(PyObject* self, PyObject* args)
 		exit(1);
 	}
 
-	PyTuple_SetItem(ret, 0, PyLong_FromUnsignedLongLong((uint64_t)tcc_state));
-	PyTuple_SetItem(ret, 1, PyLong_FromUnsignedLongLong((uint64_t)entry));
+	PyTuple_SetItem(ret, 0, PyLong_FromUnsignedLongLong((intptr_t) tcc_state));
+	PyTuple_SetItem(ret, 1, PyLong_FromUnsignedLongLong((intptr_t) entry));
 
 	return ret;
 
@@ -243,8 +245,8 @@ PyObject* tcc_loop_exec(PyObject* self, PyObject* args)
 		}
 
 		pArgs = PyTuple_New(2);
-		PyTuple_SetItem(pArgs, 0, PyLong_FromUnsignedLongLong((uint64_t)cpu));
-		PyTuple_SetItem(pArgs, 1, PyLong_FromUnsignedLongLong((uint64_t)vm));
+		PyTuple_SetItem(pArgs, 0, PyLong_FromUnsignedLongLong((intptr_t)cpu));
+		PyTuple_SetItem(pArgs, 1, PyLong_FromUnsignedLongLong((intptr_t)vm));
 		ret = PyObject_CallObject(func, pArgs);
 		Py_DECREF(2);