double iv, iw, ix;
if ((PyObject *)z != Py_None) {
- PyErr_SetString(PyExc_TypeError,
- "3rd argument to floating pow() must be None");
+ PyErr_SetString(PyExc_TypeError, "pow() 3rd argument not "
+ "allowed unless all other arguments are integers");
return NULL;
}
CONVERT_TO_LONG(w, iw);
if (iw < 0) {
if ((PyObject *)z != Py_None) {
- PyErr_SetString(PyExc_TypeError, "integer pow() arg "
- "3 must not be specified when arg 2 is < 0");
+ PyErr_SetString(PyExc_TypeError, "pow() 2nd argument "
+ "cannot be negative when 3rd argument specified");
return NULL;
}
/* Return a float. This works because we know that
CONVERT_TO_LONG(z, iz);
if (iz == 0) {
PyErr_SetString(PyExc_ValueError,
- "pow() arg 3 cannot be 0");
+ "pow() 3rd argument cannot be 0");
return NULL;
}
}
Py_INCREF(Py_NotImplemented);
return Py_NotImplemented;
}
-
+
+ if (c != Py_None && ((PyLongObject *)c)->ob_size == 0) {
+ PyErr_SetString(PyExc_ValueError,
+ "pow() 3rd argument cannot be 0");
+ z = NULL;
+ goto error;
+ }
+
size_b = b->ob_size;
if (size_b < 0) {
Py_DECREF(a);
Py_DECREF(b);
Py_DECREF(c);
if (x != Py_None) {
- PyErr_SetString(PyExc_TypeError, "integer pow() arg "
- "3 must not be specified when arg 2 is < 0");
+ PyErr_SetString(PyExc_TypeError, "pow() 2nd argument "
+ "cannot be negative when 3rd argument specified");
return NULL;
}
/* Return a float. This works because we know that