From 6921eca227ac2283ebcdf98e10aebea57bd5daf3 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 18 Feb 2003 16:36:28 +0000 Subject: [PATCH] Make PyNumber_Check() a bit more careful, since all sorts of things now have tp_as_number. Check for nb_int or nb_float. --- Misc/NEWS | 8 ++++++++ Objects/abstract.c | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Misc/NEWS b/Misc/NEWS index 5e0bad46cfd..19752f03c6e 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -89,6 +89,10 @@ Core and builtins Extension modules ----------------- +- operator.isNumberType() now checks that the object has a nb_int or + nb_float slot, rather than simply checking whether it has a non-NULL + tp_as_number pointer. + - The imp module now has ways to acquire and release the "import lock": imp.acquire_lock() and imp.release_lock(). Note: this is a reentrant lock, so releasing the lock only truly releases it when @@ -318,6 +322,10 @@ Build C API ----- +- PyNumber_Check() now checks that the object has a nb_int or nb_float + slot, rather than simply checking whether it has a non-NULL + tp_as_number pointer. + - A C type that inherits from a base type that defines tp_as_buffer will now inherit the tp_as_buffer pointer if it doesn't define one. (SF #681367) diff --git a/Objects/abstract.c b/Objects/abstract.c index c18d5e7f78f..b4fbd32a872 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -308,7 +308,9 @@ int PyObject_AsWriteBuffer(PyObject *obj, int PyNumber_Check(PyObject *o) { - return o && o->ob_type->tp_as_number; + return o && o->ob_type->tp_as_number && + (o->ob_type->tp_as_number->nb_int || + o->ob_type->tp_as_number->nb_float); } /* Binary operators */