Eugene Kapun <abacabadabac...@gmail.com> added the comment:

This patch still assumes that if so->table didn't change then the table wasn't 
reallocated (see http://en.wikipedia.org/wiki/ABA_problem). One solution is to 
check that so->mask didn't change as well. Also, checking that refcnt > 1 is 
redundant because if entry->key == startkey then there are at least two 
references: one from entry->key and another from startkey.

These functions have a bug that may cause them to refer to deallocated memory 
when both arguments are sets: set_intersection, set_isdisjoint, 
set_difference_update_internal, set_difference, 
set_symmetric_difference_update, set_issubset.
These functions may also do the same if the first argument is a set and the 
second argument is a dict: set_difference, set_symmetric_difference_update.

Bugs in set_repr:
> keys = PySequence_List((PyObject *)so);
> if (keys == NULL)
>       goto done;
> 
> listrepr = PyObject_Repr(keys);
> Py_DECREF(keys);
List pointed to by keys is already deallocated at this point.
> if (listrepr == NULL) {
>       Py_DECREF(keys);
But this code tries to DECREF it.
>       goto done;
> }
> newsize = PyUnicode_GET_SIZE(listrepr);
> result = PyUnicode_FromUnicode(NULL, newsize);
> if (result) {
>       u = PyUnicode_AS_UNICODE(result);
>       *u++ = '{';
>       /* Omit the brackets from the listrepr */
>       Py_UNICODE_COPY(u, PyUnicode_AS_UNICODE(listrepr)+1,
>                          PyUnicode_GET_SIZE(listrepr)-2);
>       u += newsize-2;
>       *u++ = '}';
> }
> Py_DECREF(listrepr);
> if (Py_TYPE(so) != &PySet_Type) {
result may be NULL here.
>       PyObject *tmp = PyUnicode_FromFormat("%s(%U)",
>                                            Py_TYPE(so)->tp_name,
>                                            result);
I think PyUnicode_FromFormat won't like it.
>       Py_DECREF(result);
>       result = tmp;
> }

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue8420>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to