Author pitrou
Recipients Ramchandra Apte, mark.dickinson, neologix, phillies, pitrou, vstinner
Date 2011-12-17.22:25:28
SpamBayes Score 1.07003e-07
Marked as misclassified No
Message-id <1324160729.5.0.326221700697.issue13555@psf.upfronthosting.co.za>
In-reply-to
Content
I think there's a problem here:

+    self->data = realloc(self->data, self->size * sizeof(PyObject *));
+    if (self->data == NULL)
         goto nomemory;

If realloc() fails, the old data pointer is lost and therefore will never get free()ed.

Same for:

+        self->buf = (char *)realloc(self->buf, self->buf_size);

Here:

-        int *marks;
-        s=self->marks_size+20;
-        if (s <= self->num_marks) s=self->num_marks + 1;
+        size_t alloc;
+        Py_ssize_t *marks;
+
+        /* Use the size_t type to check for overflow. */
+        alloc = ((size_t)self->num_marks << 1) + 20;

It seems you are changing the overallocation algorithm (from additive to multiplicative). I'm not sure it should be in the scope of the patch, although multiplicative overallocation is generally better.
History
Date User Action Args
2011-12-17 22:25:29pitrousetrecipients: + pitrou, mark.dickinson, vstinner, neologix, Ramchandra Apte, phillies
2011-12-17 22:25:29pitrousetmessageid: <1324160729.5.0.326221700697.issue13555@psf.upfronthosting.co.za>
2011-12-17 22:25:28pitroulinkissue13555 messages
2011-12-17 22:25:28pitroucreate