diff options
Diffstat (limited to 'plugins/pychrysalide/analysis/content.c')
-rw-r--r-- | plugins/pychrysalide/analysis/content.c | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/plugins/pychrysalide/analysis/content.c b/plugins/pychrysalide/analysis/content.c index 93292fb..8934c88 100644 --- a/plugins/pychrysalide/analysis/content.c +++ b/plugins/pychrysalide/analysis/content.c @@ -155,7 +155,7 @@ static PyObject *py_binary_content_describe(PyObject *self, PyObject *args) static PyObject *py_binary_content_read_raw(PyObject *self, PyObject *args) { PyObject *result; /* Instance à retourner */ - vmpa2t addr; /* Position interne associée */ + vmpa2t *addr; /* Position interne associée */ unsigned long long length; /* Quantité de données à lire */ int ret; /* Bilan de lecture des args. */ GBinContent *content; /* Version GLib du format */ @@ -173,15 +173,20 @@ static PyObject *py_binary_content_read_raw(PyObject *self, PyObject *args) content = G_BIN_CONTENT(pygobject_get(self)); - val = g_binary_content_get_raw_access(content, &addr, length); + val = g_binary_content_get_raw_access(content, addr, length); if (val == NULL) { + clean_vmpa_arg(addr); + PyErr_SetString(PyExc_Exception, _("Invalid read access.")); return NULL; + } result = PyBytes_FromStringAndSize((char *)val, length); + clean_vmpa_arg(addr); + return result; } @@ -203,7 +208,7 @@ static PyObject *py_binary_content_read_raw(PyObject *self, PyObject *args) static PyObject *py_binary_content_read_u8(PyObject *self, PyObject *args) { PyObject *result; /* Instance à retourner */ - vmpa2t addr; /* Position interne associée */ + vmpa2t *addr; /* Position interne associée */ int ret; /* Bilan de lecture des args. */ GBinContent *content; /* Version GLib du format */ uint8_t val; /* Valeur lue à faire suivre */ @@ -221,15 +226,20 @@ static PyObject *py_binary_content_read_u8(PyObject *self, PyObject *args) content = G_BIN_CONTENT(pygobject_get(self)); - status = g_binary_content_read_u8(content, &addr, &val); + status = g_binary_content_read_u8(content, addr, &val); if (!status) { + clean_vmpa_arg(addr); + PyErr_SetString(PyExc_Exception, _("Invalid read access.")); return NULL; + } result = PyLong_FromUnsignedLong(val); + clean_vmpa_arg(addr); + return result; } @@ -251,7 +261,7 @@ static PyObject *py_binary_content_read_u8(PyObject *self, PyObject *args) static PyObject *py_binary_content_read_u16(PyObject *self, PyObject *args) { PyObject *result; /* Instance à retourner */ - vmpa2t addr; /* Position interne associée */ + vmpa2t *addr; /* Position interne associée */ unsigned long endianness; /* Boutisme de la lecture */ int ret; /* Bilan de lecture des args. */ GBinContent *content; /* Version GLib du format */ @@ -273,15 +283,20 @@ static PyObject *py_binary_content_read_u16(PyObject *self, PyObject *args) content = G_BIN_CONTENT(pygobject_get(self)); - status = g_binary_content_read_u16(content, &addr, endianness, &val); + status = g_binary_content_read_u16(content, addr, endianness, &val); if (!status) { + clean_vmpa_arg(addr); + PyErr_SetString(PyExc_Exception, _("Invalid read access.")); return NULL; + } result = PyLong_FromUnsignedLong(val); + clean_vmpa_arg(addr); + return result; } @@ -303,7 +318,7 @@ static PyObject *py_binary_content_read_u16(PyObject *self, PyObject *args) static PyObject *py_binary_content_read_u32(PyObject *self, PyObject *args) { PyObject *result; /* Instance à retourner */ - vmpa2t addr; /* Position interne associée */ + vmpa2t *addr; /* Position interne associée */ unsigned long endianness; /* Boutisme de la lecture */ int ret; /* Bilan de lecture des args. */ GBinContent *content; /* Version GLib du format */ @@ -325,15 +340,20 @@ static PyObject *py_binary_content_read_u32(PyObject *self, PyObject *args) content = G_BIN_CONTENT(pygobject_get(self)); - status = g_binary_content_read_u32(content, &addr, endianness, &val); + status = g_binary_content_read_u32(content, addr, endianness, &val); if (!status) { + clean_vmpa_arg(addr); + PyErr_SetString(PyExc_Exception, _("Invalid read access.")); return NULL; + } result = PyLong_FromUnsignedLong(val); + clean_vmpa_arg(addr); + return result; } @@ -354,7 +374,7 @@ static PyObject *py_binary_content_read_u32(PyObject *self, PyObject *args) static PyObject *py_binary_content_read_u64(PyObject *self, PyObject *args) { PyObject *result; /* Instance à retourner */ - vmpa2t addr; /* Position interne associée */ + vmpa2t *addr; /* Position interne associée */ unsigned long endianness; /* Boutisme de la lecture */ int ret; /* Bilan de lecture des args. */ GBinContent *content; /* Version GLib du format */ @@ -376,15 +396,20 @@ static PyObject *py_binary_content_read_u64(PyObject *self, PyObject *args) content = G_BIN_CONTENT(pygobject_get(self)); - status = g_binary_content_read_u64(content, &addr, endianness, &val); + status = g_binary_content_read_u64(content, addr, endianness, &val); if (!status) { + clean_vmpa_arg(addr); + PyErr_SetString(PyExc_Exception, _("Invalid read access.")); return NULL; + } result = PyLong_FromUnsignedLongLong(val); + clean_vmpa_arg(addr); + return result; } |