[Python-checkins] r45947 - in python/trunk: Modules/_csv.c Modules/_elementtree.c Modules/_ssl.c Objects/longobject.c

neal.norwitz python-checkins at python.org
Wed May 10 08:58:00 CEST 2006


Author: neal.norwitz
Date: Wed May 10 08:57:58 2006
New Revision: 45947

Modified:
   python/trunk/Modules/_csv.c
   python/trunk/Modules/_elementtree.c
   python/trunk/Modules/_ssl.c
   python/trunk/Objects/longobject.c
Log:
Fix problems found by Coverity.

longobject.c: also fix an ssize_t problem
  <a> could have been NULL, so hoist the size calc to not use <a>.

_ssl.c: under fail: self is DECREF'd, but it would have been NULL.

_elementtree.c: delete self if there was an error.

_csv.c: I'm not sure if lineterminator could have been anything other than
a string.  However, other string method calls are checked, so check this
one too.



Modified: python/trunk/Modules/_csv.c
==============================================================================
--- python/trunk/Modules/_csv.c	(original)
+++ python/trunk/Modules/_csv.c	Wed May 10 08:57:58 2006
@@ -1104,6 +1104,8 @@
 	char *terminator;
 
 	terminator_len = PyString_Size(self->dialect->lineterminator);
+	if (terminator_len == -1)
+		return 0;
 
 	/* grow record buffer if necessary */
 	if (!join_check_rec_size(self, self->rec_len + terminator_len))

Modified: python/trunk/Modules/_elementtree.c
==============================================================================
--- python/trunk/Modules/_elementtree.c	(original)
+++ python/trunk/Modules/_elementtree.c	Wed May 10 08:57:58 2006
@@ -327,8 +327,10 @@
 
     if (attrib != Py_None) {
 
-        if (element_new_extra(self, attrib) < 0)
+        if (element_new_extra(self, attrib) < 0) {
+            PyObject_Del(self);
             return NULL;
+	}
 
         self->extra->length = 0;
         self->extra->allocated = STATIC_CHILDREN;

Modified: python/trunk/Modules/_ssl.c
==============================================================================
--- python/trunk/Modules/_ssl.c	(original)
+++ python/trunk/Modules/_ssl.c	Wed May 10 08:57:58 2006
@@ -183,9 +183,9 @@
 	int sockstate;
 
 	self = PyObject_New(PySSLObject, &PySSL_Type); /* Create new object */
-	if (self == NULL){
-		errstr = "newPySSLObject error";
-		goto fail;
+	if (self == NULL) {
+		PyErr_SetString(PySSLErrorObject, "newPySSLObject error");
+		return NULL;
 	}
 	memset(self->server, '\0', sizeof(char) * X509_NAME_MAXLEN);
 	memset(self->issuer, '\0', sizeof(char) * X509_NAME_MAXLEN);

Modified: python/trunk/Objects/longobject.c
==============================================================================
--- python/trunk/Objects/longobject.c	(original)
+++ python/trunk/Objects/longobject.c	Wed May 10 08:57:58 2006
@@ -66,8 +66,7 @@
 PyLongObject *
 _PyLong_New(Py_ssize_t size)
 {
-	if (size > INT_MAX) {
-		/* XXX: Fix this check when ob_size becomes ssize_t */
+	if (size > PY_SSIZE_T_MAX) {
 		PyErr_NoMemory();
 		return NULL;
 	}
@@ -1580,9 +1579,10 @@
 	assert(size_w == ABS(w->ob_size)); /* That's how d was calculated */
 
 	size_v = ABS(v->ob_size);
-	a = _PyLong_New(size_v - size_w + 1);
+	k = size_v - size_w;
+	a = _PyLong_New(k + 1);
 
-	for (j = size_v, k = a->ob_size-1; a != NULL && k >= 0; --j, --k) {
+	for (j = size_v; a != NULL && k >= 0; --j, --k) {
 		digit vj = (j >= size_v) ? 0 : v->ob_digit[j];
 		twodigits q;
 		stwodigits carry = 0;


More information about the Python-checkins mailing list