]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Backport: Fix missing NULL checks after PyTuple_New, PyList_New, PyDict_New
authorGeorg Brandl <georg@python.org>
Fri, 17 Mar 2006 19:04:15 +0000 (19:04 +0000)
committerGeorg Brandl <georg@python.org>
Fri, 17 Mar 2006 19:04:15 +0000 (19:04 +0000)
Modules/almodule.c
Modules/gcmodule.c
Modules/ossaudiodev.c
Modules/pyexpat.c
Objects/tupleobject.c
Objects/typeobject.c

index 12b265e90ece7d82998e328074a12902ed016171..e457f86baf9fe0d5e4cc3b037f9407ca8174edef 100644 (file)
@@ -1482,7 +1482,8 @@ al_GetParams(PyObject *self, PyObject *args)
        }
        if (alGetParams(resource, pvs, npvs) < 0)
                goto error;
-       v = PyList_New(npvs);
+       if (!(v = PyList_New(npvs)))
+               goto error;
        for (i = 0; i < npvs; i++) {
                if (pvs[i].sizeOut < 0) {
                        char buf[32];
@@ -1692,6 +1693,7 @@ al_GetParamInfo(PyObject *self, PyObject *args)
        if (alGetParamInfo(res, param, &pinfo) < 0)
                return NULL;
        v = PyDict_New();
+       if (!v) return NULL;
 
        item = PyInt_FromLong((long) pinfo.resource);
        PyDict_SetItemString(v, "resource", item);
index c563ed84d246bc5ed884c27c8cd09191fa6d4a05..5366209c9a17e434486698ed0ed1f35c9b70ffaa 100644 (file)
@@ -1047,6 +1047,7 @@ gc_get_referrers(PyObject *self, PyObject *args)
 {
        int i;
        PyObject *result = PyList_New(0);
+       if (!result) return NULL;
        for (i = 0; i < NUM_GENERATIONS; i++) {
                if (!(gc_referrers_for(args, GEN_HEAD(i), result))) {
                        Py_DECREF(result);
index 047355fb784d5c724c5cf0afa658871b95832d00..11592353ce52417c38922deef61524a52a979707 100644 (file)
@@ -908,24 +908,32 @@ build_namelists (PyObject *module)
 
     labels = PyList_New(num_controls);
     names = PyList_New(num_controls);
+    if (labels == NULL || names == NULL)
+        goto error2;
     for (i = 0; i < num_controls; i++) {
         s = PyString_FromString(control_labels[i]);
         if (s == NULL)
-            return -1;
+            goto error2;
         PyList_SET_ITEM(labels, i, s);
 
         s = PyString_FromString(control_names[i]);
         if (s == NULL)
-            return -1;
+            goto error2;
         PyList_SET_ITEM(names, i, s);
     }
 
     if (PyModule_AddObject(module, "control_labels", labels) == -1)
-        return -1;
+        goto error2;
     if (PyModule_AddObject(module, "control_names", names) == -1)
-        return -1;
+        goto error1;
 
     return 0;
+
+error2:
+    Py_XDECREF(labels);
+error1:
+    Py_XDECREF(names);
+    return -1;
 }
 
 
index eb6b22f1e05eacba799374faad825cb01ca588c6..2317d2ec01321b118a561546756eb208c8e72b45 100644 (file)
@@ -1506,7 +1506,7 @@ xmlparse_getattr(xmlparseobject *self, char *name)
             return self->intern;
         }
     }
-
+    
 #define APPEND(list, str)                              \
         do {                                           \
                 PyObject *o = PyString_FromString(str);        \
@@ -1518,6 +1518,8 @@ xmlparse_getattr(xmlparseobject *self, char *name)
     if (strcmp(name, "__members__") == 0) {
         int i;
         PyObject *rc = PyList_New(0);
+       if (!rc)
+               return NULL;
         for (i = 0; handler_info[i].name != NULL; i++) {
             PyObject *o = get_handler_name(&handler_info[i]);
             if (o != NULL)
index ea7d75302238d5e81eea50e781885bce8c462e6c..74b905626c1735c88a16bf4345233b8c598988fd 100644 (file)
@@ -615,6 +615,7 @@ tuplesubscript(PyTupleObject* self, PyObject* item)
                }
                else {
                        result = PyTuple_New(slicelength);
+                       if (!result) return NULL;
 
                        src = self->ob_item;
                        dest = ((PyTupleObject *)result)->ob_item;
index 5fec015f78b5334067d6b53a91b7c6c3cd465cbe..bb4b7a8cf020485fe3b1c734f9663f9b30e07ae7 100644 (file)
@@ -1105,14 +1105,17 @@ set_mro_error(PyObject *to_merge, int *remain)
        char buf[1000];
        PyObject *k, *v;
        PyObject *set = PyDict_New();
+       if (!set) return;
 
        to_merge_size = PyList_GET_SIZE(to_merge);
        for (i = 0; i < to_merge_size; i++) {
                PyObject *L = PyList_GET_ITEM(to_merge, i);
                if (remain[i] < PyList_GET_SIZE(L)) {
                        PyObject *c = PyList_GET_ITEM(L, remain[i]);
-                       if (PyDict_SetItem(set, c, Py_None) < 0)
+                       if (PyDict_SetItem(set, c, Py_None) < 0) {
+                               Py_DECREF(set);
                                return;
+                       }
                }
        }
        n = PyDict_Size(set);