bpo-35059: Cleanup usage of Python macros (GH-10648)

Don't pass complex expressions but regular variables to Python
macros.

* _datetimemodule.c: split single large "if" into two "if"
  in date_new(), time_new() and datetime_new().
* _pickle.c, load_extension(): flatten complex "if" expression into
  more regular C code.
* _ssl.c: addbool() now uses a temporary bool_obj to only evaluate
  the value once.
* weakrefobject.c: replace "Py_INCREF(result = proxy);"
  with "result = proxy; Py_INCREF(result);"
This commit is contained in:
Victor Stinner 2018-11-22 03:37:50 +01:00 committed by GitHub
parent 2ff8fb7639
commit b37672daf6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 109 additions and 85 deletions

View file

@ -5858,14 +5858,20 @@ load_extension(UnpicklerObject *self, int nbytes)
/* Since the extension registry is manipulable via Python code,
* confirm that pair is really a 2-tuple of strings.
*/
if (!PyTuple_Check(pair) || PyTuple_Size(pair) != 2 ||
!PyUnicode_Check(module_name = PyTuple_GET_ITEM(pair, 0)) ||
!PyUnicode_Check(class_name = PyTuple_GET_ITEM(pair, 1))) {
Py_DECREF(py_code);
PyErr_Format(PyExc_ValueError, "_inverted_registry[%ld] "
"isn't a 2-tuple of strings", code);
return -1;
if (!PyTuple_Check(pair) || PyTuple_Size(pair) != 2) {
goto error;
}
module_name = PyTuple_GET_ITEM(pair, 0);
if (!PyUnicode_Check(module_name)) {
goto error;
}
class_name = PyTuple_GET_ITEM(pair, 1);
if (!PyUnicode_Check(class_name)) {
goto error;
}
/* Load the object. */
obj = find_class(self, module_name, class_name);
if (obj == NULL) {
@ -5881,6 +5887,12 @@ load_extension(UnpicklerObject *self, int nbytes)
}
PDATA_PUSH(self->stack, obj, -1);
return 0;
error:
Py_DECREF(py_code);
PyErr_Format(PyExc_ValueError, "_inverted_registry[%ld] "
"isn't a 2-tuple of strings", code);
return -1;
}
static int