[lxc-devel] [lxc/master] python3: Deal with potential NULL char*

stgraber on Github lxc-bot at linuxcontainers.org
Fri Mar 17 08:55:41 UTC 2017


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 370 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20170317/0cc31ab4/attachment.bin>
-------------- next part --------------
From 6bd6580195c68dbd358cfbf0356fc331352212fa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Fri, 17 Mar 2017 09:52:41 +0100
Subject: [PATCH] python3: Deal with potential NULL char*
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #1466

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 src/python-lxc/lxc.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 57 insertions(+), 7 deletions(-)

diff --git a/src/python-lxc/lxc.c b/src/python-lxc/lxc.c
index b69116d..166910f 100644
--- a/src/python-lxc/lxc.c
+++ b/src/python-lxc/lxc.c
@@ -430,7 +430,14 @@ LXC_get_global_config_item(PyObject *self, PyObject *args, PyObject *kwds)
 static PyObject *
 LXC_get_version(PyObject *self, PyObject *args)
 {
-    return PyUnicode_FromString(lxc_get_version());
+    char *rv = NULL;
+
+    rv = lxc_get_version();
+    if (!rv) {
+        return PyUnicode_FromString("");
+    }
+
+    return PyUnicode_FromString(rv);
 }
 
 static PyObject *
@@ -484,6 +491,10 @@ LXC_list_containers(PyObject *self, PyObject *args, PyObject *kwds)
     /* Generate the tuple */
     list = PyTuple_New(list_count);
     for (i = 0; i < list_count; i++) {
+        if (!names[i]) {
+            continue
+        }
+
         PyTuple_SET_ITEM(list, i, PyUnicode_FromString(names[i]));
         free(names[i]);
     }
@@ -528,7 +539,7 @@ Container_init(Container *self, PyObject *args, PyObject *kwds)
         Py_XDECREF(fs_config_path);
 
         PyErr_Format(PyExc_RuntimeError, "%s:%s:%d: error during init for container '%s'.",
-			__FUNCTION__, __FILE__, __LINE__, name);
+            __FUNCTION__, __FILE__, __LINE__, name);
         return -1;
     }
 
@@ -550,8 +561,14 @@ Container_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 static PyObject *
 Container_config_file_name(Container *self, void *closure)
 {
-    return PyUnicode_FromString(
-                self->container->config_file_name(self->container));
+    char *rv = NULL;
+
+    rv = self->container->config_file_name(self->container);
+    if (!rv) {
+        return PyUnicode_FromString("");
+    }
+
+    return PyUnicode_FromString(rv);
 }
 
 static PyObject *
@@ -583,6 +600,10 @@ Container_init_pid(Container *self, void *closure)
 static PyObject *
 Container_name(Container *self, void *closure)
 {
+    if (!self->container->name) {
+        return PyUnicode_FromString("");
+    }
+
     return PyUnicode_FromString(self->container->name);
 }
 
@@ -599,7 +620,15 @@ Container_running(Container *self, void *closure)
 static PyObject *
 Container_state(Container *self, void *closure)
 {
-    return PyUnicode_FromString(self->container->state(self->container));
+    char *rv = NULL;
+
+    rv = self->container->state(self->container);
+
+    if (!rv) {
+        return PyUnicode_FromString("");
+    }
+
+    return PyUnicode_FromString(rv);
 }
 
 /* Container Functions */
@@ -1023,8 +1052,15 @@ Container_get_config_item(Container *self, PyObject *args, PyObject *kwds)
 static PyObject *
 Container_get_config_path(Container *self, PyObject *args, PyObject *kwds)
 {
-    return PyUnicode_FromString(
-                self->container->get_config_path(self->container));
+    char *rv = NULL;
+
+    rv = self->container->get_config_path(self->container);
+
+    if (!rv) {
+        return PyUnicode_FromString("");
+    }
+
+    return PyUnicode_FromString(rv);
 }
 
 static PyObject *
@@ -1088,6 +1124,11 @@ Container_get_interfaces(Container *self)
     /* Add the entries to the tuple and free the memory */
     i = 0;
     while (interfaces[i]) {
+        if (!interfaces[i]) {
+            i++;
+            continue
+        }
+
         PyObject *unicode = PyUnicode_FromString(interfaces[i]);
         if (!unicode) {
             Py_DECREF(ret);
@@ -1143,6 +1184,11 @@ Container_get_ips(Container *self, PyObject *args, PyObject *kwds)
     /* Add the entries to the tuple and free the memory */
     i = 0;
     while (ips[i]) {
+        if (!ips[i]) {
+            i++;
+            continue
+        }
+
         PyObject *unicode = PyUnicode_FromString(ips[i]);
         if (!unicode) {
             Py_DECREF(ret);
@@ -1440,6 +1486,10 @@ Container_snapshot_list(Container *self, PyObject *args, PyObject *kwds)
 
     list = PyTuple_New(snap_count);
     for (i = 0; i < snap_count; i++) {
+        if (!snapi[i]) {
+            continue
+        }
+
         PyObject *list_entry = NULL;
 
         list_entry = PyTuple_New(4);


More information about the lxc-devel mailing list