Commit d118318a authored by Jim Fulton's avatar Jim Fulton

Added check to make sure BTreeItems objects don't segfault by

exceeding underlying BTree data because BTree items were deleted
since the BTreeItems object was deleted.

Note that accessing BTreeItems elements could give incorrect
results if BTree items are deleted after creating a BTreeItems
object.
parent feb49dee
...@@ -85,7 +85,7 @@ ...@@ -85,7 +85,7 @@
static char BTree_module_documentation[] = static char BTree_module_documentation[] =
"" ""
"\n$Id: BTree.c,v 1.22 1999/06/10 20:29:41 jim Exp $" "\n$Id: BTree.c,v 1.23 1999/06/23 22:49:08 jim Exp $"
; ;
#define PERSISTENT #define PERSISTENT
...@@ -283,7 +283,8 @@ BTreeItems_item(BTreeItems *self, int i) ...@@ -283,7 +283,8 @@ BTreeItems_item(BTreeItems *self, int i)
j=i; j=i;
l=self->len; l=self->len;
if(j < 0) j += l; if(j < 0) j += l;
if(j < 0 || j >= l) i=j+self->first;
if(j < 0 || j >= l || i >= self->data->count)
{ {
PyObject *v; PyObject *v;
v=PyInt_FromLong(i); v=PyInt_FromLong(i);
...@@ -296,7 +297,6 @@ BTreeItems_item(BTreeItems *self, int i) ...@@ -296,7 +297,6 @@ BTreeItems_item(BTreeItems *self, int i)
Py_DECREF(v); Py_DECREF(v);
return NULL; return NULL;
} }
i=j+self->first;
return BTreeItems_item_BTree(self->kind, i, self->data); return BTreeItems_item_BTree(self->kind, i, self->data);
} }
...@@ -1842,7 +1842,7 @@ initBTree() ...@@ -1842,7 +1842,7 @@ initBTree()
#endif #endif
{ {
PyObject *m, *d; PyObject *m, *d;
char *rev="$Revision: 1.22 $"; char *rev="$Revision: 1.23 $";
UNLESS(PyExtensionClassCAPI=PyCObject_Import("ExtensionClass","CAPI")) UNLESS(PyExtensionClassCAPI=PyCObject_Import("ExtensionClass","CAPI"))
return; return;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment