Commit c0af6675 authored by Fred Drake's avatar Fred Drake

proxy_compare(): Make sure that we unwrap both objects being compared if

both are proxy objects.
parent e4848046
...@@ -220,6 +220,13 @@ proxy_checkref(PyWeakReference *proxy) ...@@ -220,6 +220,13 @@ proxy_checkref(PyWeakReference *proxy)
o = PyWeakref_GET_OBJECT(o); \ o = PyWeakref_GET_OBJECT(o); \
} }
#define UNWRAP_I(o) \
if (PyWeakref_CheckProxy(o)) { \
if (!proxy_checkref((PyWeakReference *)o)) \
return -1; \
o = PyWeakref_GET_OBJECT(o); \
}
#define WRAP_UNARY(method, generic) \ #define WRAP_UNARY(method, generic) \
static PyObject * \ static PyObject * \
method(PyObject *proxy) { \ method(PyObject *proxy) { \
...@@ -284,11 +291,11 @@ proxy_setattr(PyWeakReference *proxy, PyObject *name, PyObject *value) ...@@ -284,11 +291,11 @@ proxy_setattr(PyWeakReference *proxy, PyObject *name, PyObject *value)
} }
static int static int
proxy_compare(PyWeakReference *proxy, PyObject *v) proxy_compare(PyObject *proxy, PyObject *v)
{ {
if (!proxy_checkref(proxy)) UNWRAP_I(proxy);
return -1; UNWRAP_I(v);
return PyObject_Compare(PyWeakref_GET_OBJECT(proxy), v); return PyObject_Compare(proxy, v);
} }
/* number slots */ /* number slots */
...@@ -451,7 +458,7 @@ _PyWeakref_ProxyType = { ...@@ -451,7 +458,7 @@ _PyWeakref_ProxyType = {
(printfunc)proxy_print, /*tp_print*/ (printfunc)proxy_print, /*tp_print*/
0, /*tp_getattr*/ 0, /*tp_getattr*/
0, /*tp_setattr*/ 0, /*tp_setattr*/
(cmpfunc)proxy_compare, /*tp_compare*/ proxy_compare, /*tp_compare*/
(unaryfunc)proxy_repr, /*tp_repr*/ (unaryfunc)proxy_repr, /*tp_repr*/
&proxy_as_number, /*tp_as_number*/ &proxy_as_number, /*tp_as_number*/
&proxy_as_sequence, /*tp_as_sequence*/ &proxy_as_sequence, /*tp_as_sequence*/
...@@ -482,7 +489,7 @@ _PyWeakref_CallableProxyType = { ...@@ -482,7 +489,7 @@ _PyWeakref_CallableProxyType = {
(printfunc)proxy_print, /*tp_print*/ (printfunc)proxy_print, /*tp_print*/
0, /*tp_getattr*/ 0, /*tp_getattr*/
0, /*tp_setattr*/ 0, /*tp_setattr*/
(cmpfunc)proxy_compare, /*tp_compare*/ proxy_compare, /*tp_compare*/
(unaryfunc)proxy_repr, /*tp_repr*/ (unaryfunc)proxy_repr, /*tp_repr*/
&proxy_as_number, /*tp_as_number*/ &proxy_as_number, /*tp_as_number*/
&proxy_as_sequence, /*tp_as_sequence*/ &proxy_as_sequence, /*tp_as_sequence*/
......
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