From 4e31246a25d29db0c554ae2f6b34fc19b8fcdefd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Mon, 9 Jun 2014 12:02:02 -0400 Subject: [PATCH] python3: Fix crashes in snapshot() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes sure all PyObject structs are always initialized to NULL, this will fix issues such as (issue #239). Also add a snapshot/list/restore testcase to the python3 api test code. Signed-off-by: Stéphane Graber Acked-by: Serge E. Hallyn --- src/python-lxc/examples/api_test.py | 8 ++++++++ src/python-lxc/lxc.c | 9 +++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/python-lxc/examples/api_test.py b/src/python-lxc/examples/api_test.py index 79521970a..2abbb435f 100755 --- a/src/python-lxc/examples/api_test.py +++ b/src/python-lxc/examples/api_test.py @@ -180,6 +180,14 @@ assert(container.init_pid == -1) assert(not container.running) assert(container.state == "STOPPED") +## Snapshotting the container +print("Snapshotting the container") +assert(not container.snapshot_list()) +assert(container.snapshot() == "snap0") +assert(len(container.snapshot_list()) == 1) +assert(container.snapshot_restore("snap0") is True) +assert(container.snapshot_destroy("snap0") is True) + ## Cloning the container print("Cloning the container as '%s'" % CLONE_NAME) clone = container.clone(CLONE_NAME) diff --git a/src/python-lxc/lxc.c b/src/python-lxc/lxc.c index a8ab65b27..1bc977a31 100644 --- a/src/python-lxc/lxc.c +++ b/src/python-lxc/lxc.c @@ -148,7 +148,7 @@ static lxc_attach_options_t *lxc_attach_parse_options(PyObject *kwds) PyObject *stdout_obj = NULL; PyObject *stderr_obj = NULL; PyObject *initial_cwd_obj = NULL; - PyObject *dummy; + PyObject *dummy = NULL; bool parse_result; lxc_attach_options_t default_options = LXC_ATTACH_OPTIONS_DEFAULT; @@ -257,7 +257,7 @@ static PyObject * LXC_arch_to_personality(PyObject *self, PyObject *arg) { long rv = -1; - PyObject *pystr; + PyObject *pystr = NULL; char *str; if (!PyUnicode_Check(arg)) { @@ -737,7 +737,8 @@ Container_create(Container *self, PyObject *args, PyObject *kwds) char* template_name = NULL; int flags = 0; char** create_args = {NULL}; - PyObject *retval = NULL, *vargs = NULL; + PyObject *retval = NULL; + PyObject *vargs = NULL; int i = 0; static char *kwlist[] = {"template", "flags", "args", NULL}; @@ -1229,7 +1230,7 @@ Container_snapshot(Container *self, PyObject *args, PyObject *kwds) int retval = 0; int ret = 0; char newname[20]; - PyObject *py_comment_path; + PyObject *py_comment_path = NULL; if (! PyArg_ParseTupleAndKeywords(args, kwds, "|O&", kwlist, PyUnicode_FSConverter, &py_comment_path))