diff options
Diffstat (limited to 'Python/bltinmodule.c')
-rw-r--r-- | Python/bltinmodule.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index e18eb2a95a..7647523b58 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -211,7 +211,24 @@ Deprecated since release 2.3. Instead, use the extended call syntax:\n\ static PyObject * builtin_bin(PyObject *self, PyObject *v) { - return PyNumber_ToBase(v, 2); + PyNumberMethods *nb; + PyObject *res; + + if ((nb = v->ob_type->tp_as_number) == NULL || + nb->nb_hex == NULL) { + PyErr_SetString(PyExc_TypeError, + "bin() argument can't be converted to hex"); + return NULL; + } + res = (*nb->nb_bin)(v); + if (res && !PyString_Check(res)) { + PyErr_Format(PyExc_TypeError, + "__bin__ returned non-string (type %.200s)", + res->ob_type->tp_name); + Py_DECREF(res); + return NULL; + } + return res; } PyDoc_STRVAR(bin_doc, |