bpo-32571: Avoid raising unneeded AttributeError and silencing it in C code (GH-5222)
Add two new private APIs: _PyObject_LookupAttr() and _PyObject_LookupAttrId()
diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c
index b81abde..2b7aaaf 100644
--- a/Modules/_io/bufferedio.c
+++ b/Modules/_io/bufferedio.c
@@ -1541,7 +1541,9 @@
}
_bufferedreader_reset_buf(self);
- readall = _PyObject_GetAttrWithoutError(self->raw, _PyIO_str_readall);
+ if (_PyObject_LookupAttr(self->raw, _PyIO_str_readall, &readall) < 0) {
+ goto cleanup;
+ }
if (readall) {
tmp = _PyObject_CallNoArg(readall);
Py_DECREF(readall);
@@ -1561,9 +1563,6 @@
}
goto cleanup;
}
- else if (PyErr_Occurred()) {
- goto cleanup;
- }
chunks = PyList_New(0);
if (chunks == NULL)