Message149713
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. |
|
Date |
User |
Action |
Args |
2011-12-17 22:25:29 | pitrou | set | recipients:
+ pitrou, mark.dickinson, vstinner, neologix, Ramchandra Apte, phillies |
2011-12-17 22:25:29 | pitrou | set | messageid: <1324160729.5.0.326221700697.issue13555@psf.upfronthosting.co.za> |
2011-12-17 22:25:28 | pitrou | link | issue13555 messages |
2011-12-17 22:25:28 | pitrou | create | |
|