]> granicus.if.org Git - python/commitdiff
Klocwork made another run and found a bunch more problems.
authorNeal Norwitz <nnorwitz@gmail.com>
Sat, 12 Aug 2006 01:43:40 +0000 (01:43 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Sat, 12 Aug 2006 01:43:40 +0000 (01:43 +0000)
This is the first batch of fixes that should be easy to verify based on context.

This fixes problem numbers: 220 (ast), 323-324 (symtable),
321-322 (structseq), 215 (array), 210 (hotshot), 182 (codecs), 209 (etree).

Misc/README.klocwork
Modules/_codecsmodule.c
Modules/_elementtree.c
Modules/_hotshot.c
Modules/arraymodule.c
Objects/structseq.c
Python/ast.c
Python/symtable.c

index a22715ed029926b16b7b2b15685c46ac2d89422e..6d2f57fc73a007399393bb8007d49ba7fcdd0faf 100644 (file)
@@ -23,4 +23,8 @@ in addition to any analysis.
 False positives were also annotated so that the comments can
 be reviewed and reversed if the analysis was incorrect.
 
+A second run was performed on 10-Aug-2006.  The tool was tuned to remove
+some false positives and perform some additional checks.  ~150 new
+warnings were produced, primarily related to dereferencing NULL pointers.
+
 Contact python-dev@python.org for more information.
index 405fd7a29aca37e73e493064607406901c0f6d56..4dbceb78be64283bea82b7c07e85d6b2142ecde6 100644 (file)
@@ -192,7 +192,8 @@ escape_encode(PyObject *self,
        buf = PyString_AS_STRING (str);
        len = PyString_GET_SIZE (str);
        memmove(buf, buf+1, len-2);
-       _PyString_Resize(&str, len-2);
+       if (_PyString_Resize(&str, len-2) < 0)
+               return NULL;
        
        return codec_tuple(str, PyString_Size(str));
 }
index b468e71b3d4cd8884aa054ea1001db19a5ce481f..c9e524f74cfb42c30f2a4c456f19859b3be83c50 100644 (file)
@@ -809,7 +809,7 @@ element_findtext(ElementObject* self, PyObject* args)
             PyObject* text = element_get_text(item);
             if (text == Py_None)
                 return PyString_FromString("");
-            Py_INCREF(text);
+            Py_XINCREF(text);
             return text;
         }
     }
index 6d9776f1e6580fcbe9d03298480ecaef8db78deb..21bd38390262261e2dd6846e825a260f1f9c35ad 100644 (file)
@@ -313,6 +313,11 @@ unpack_string(LogReaderObject *self, PyObject **pvalue)
         return err;
 
     buf = (char *)malloc(len);
+    if (!buf) {
+       PyErr_NoMemory();
+       return ERR_EXCEPTION;
+    }
+
     for (i=0; i < len; i++) {
         ch = fgetc(self->logfp);
        buf[i] = ch;
index ba154cae140bb8a494ad9d5c543ade9b42fa55d5..14e5e5d2d78eb1eeaa0a88cfbefee0c13c34693c 100644 (file)
@@ -702,6 +702,8 @@ array_ass_slice(arrayobject *a, Py_ssize_t ilow, Py_ssize_t ihigh, PyObject *v)
                        /* Special case "a[i:j] = a" -- copy b first */
                        int ret;
                        v = array_slice(b, 0, n);
+                       if (!v)
+                               return -1;
                        ret = array_ass_slice(a, ilow, ihigh, v);
                        Py_DECREF(v);
                        return ret;
@@ -1708,6 +1710,8 @@ array_ass_subscr(arrayobject* self, PyObject* item, PyObject* value)
                        if (self == av) { 
                                value = array_slice(av, 0, av->ob_size);
                                av = (arrayobject*)value;
+                               if (!av)
+                                       return -1;
                        } 
                        else {
                                Py_INCREF(value);
index e074810df3aed4ff177137988363c317cafe67d9..7ac2a1f61e31b22e7e1224a29a7d59ad91977417 100644 (file)
@@ -215,6 +215,8 @@ structseq_contains(PyStructSequence *obj, PyObject *o)
        PyObject *tup;
        int result;
        tup = make_tuple(obj);
+       if (!tup)
+               return -1;
        result = PySequence_Contains(tup, o);
        Py_DECREF(tup);
        return result;
@@ -226,6 +228,8 @@ structseq_hash(PyObject *obj)
        PyObject *tup;
        long result;
        tup = make_tuple((PyStructSequence*) obj);
+       if (!tup)
+               return -1;
        result = PyObject_Hash(tup);
        Py_DECREF(tup);
        return result;
index ca832aa5e1567ac6eff3c4377e341985d9da7ad2..b356192d8929191f86a712924682618432725fe0 100644 (file)
@@ -2197,6 +2197,8 @@ alias_for_import_name(struct compiling *c, const node *n)
             }
             else {
                 alias_ty a = alias_for_import_name(c, CHILD(n, 0));
+                if (!a)
+                    return NULL;
                 if (strcmp(STR(CHILD(n, 1)), "as") != 0) {
                     ast_error(n, "must use 'as' in import");
                     return NULL;
index 439a24349dfbe45c29b0fb43b9e0026aae884506..3e58b5034ed9694f48f129c164c3d96403351381 100644 (file)
@@ -915,6 +915,8 @@ symtable_new_tmpname(struct symtable *st)
        PyOS_snprintf(tmpname, sizeof(tmpname), "_[%d]",
                      ++st->st_cur->ste_tmpname);
        tmp = PyString_InternFromString(tmpname);
+       if (!tmp)
+               return 0;
        if (!symtable_add_def(st, tmp, DEF_LOCAL))
                return 0;
        Py_DECREF(tmp);
@@ -1323,8 +1325,11 @@ symtable_visit_alias(struct symtable *st, alias_ty a)
        PyObject *name = (a->asname == NULL) ? a->name : a->asname;
        const char *base = PyString_AS_STRING(name);
        char *dot = strchr(base, '.');
-       if (dot)
+       if (dot) {
                store_name = PyString_FromStringAndSize(base, dot - base);
+               if (!store_name)
+                       return 0;
+       }
        else {
                store_name = name;
                Py_INCREF(store_name);