diff options
Diffstat (limited to 'Objects/funcobject.c')
| -rw-r--r-- | Objects/funcobject.c | 40 | 
1 files changed, 40 insertions, 0 deletions
diff --git a/Objects/funcobject.c b/Objects/funcobject.c index e8e2d2e15c..09b94c2642 100644 --- a/Objects/funcobject.c +++ b/Objects/funcobject.c @@ -250,6 +250,10 @@ static PyMemberDef func_memberlist[] = {  static PyObject *  func_get_code(PyFunctionObject *op, void *Py_UNUSED(ignored))  { +    if (PySys_Audit("object.__getattr__", "Os", op, "__code__") < 0) { +        return NULL; +    } +      Py_INCREF(op->func_code);      return op->func_code;  } @@ -266,6 +270,12 @@ func_set_code(PyFunctionObject *op, PyObject *value, void *Py_UNUSED(ignored))                          "__code__ must be set to a code object");          return -1;      } + +    if (PySys_Audit("object.__setattr__", "OsO", +                    op, "__code__", value) < 0) { +        return -1; +    } +      nfree = PyCode_GetNumFree((PyCodeObject *)value);      nclosure = (op->func_closure == NULL ? 0 :              PyTuple_GET_SIZE(op->func_closure)); @@ -329,6 +339,9 @@ func_set_qualname(PyFunctionObject *op, PyObject *value, void *Py_UNUSED(ignored  static PyObject *  func_get_defaults(PyFunctionObject *op, void *Py_UNUSED(ignored))  { +    if (PySys_Audit("object.__getattr__", "Os", op, "__defaults__") < 0) { +        return NULL; +    }      if (op->func_defaults == NULL) {          Py_RETURN_NONE;      } @@ -348,6 +361,16 @@ func_set_defaults(PyFunctionObject *op, PyObject *value, void *Py_UNUSED(ignored                          "__defaults__ must be set to a tuple object");          return -1;      } +    if (value) { +        if (PySys_Audit("object.__setattr__", "OsO", +                        op, "__defaults__", value) < 0) { +            return -1; +        } +    } else if (PySys_Audit("object.__delattr__", "Os", +                           op, "__defaults__") < 0) { +        return -1; +    } +      Py_XINCREF(value);      Py_XSETREF(op->func_defaults, value);      return 0; @@ -356,6 +379,10 @@ func_set_defaults(PyFunctionObject *op, PyObject *value, void *Py_UNUSED(ignored  static PyObject *  func_get_kwdefaults(PyFunctionObject *op, void *Py_UNUSED(ignored))  { +    if (PySys_Audit("object.__getattr__", "Os", +                    op, "__kwdefaults__") < 0) { +        return NULL; +    }      if (op->func_kwdefaults == NULL) {          Py_RETURN_NONE;      } @@ -375,6 +402,16 @@ func_set_kwdefaults(PyFunctionObject *op, PyObject *value, void *Py_UNUSED(ignor              "__kwdefaults__ must be set to a dict object");          return -1;      } +    if (value) { +        if (PySys_Audit("object.__setattr__", "OsO", +                        op, "__kwdefaults__", value) < 0) { +            return -1; +        } +    } else if (PySys_Audit("object.__delattr__", "Os", +                           op, "__kwdefaults__") < 0) { +        return -1; +    } +      Py_XINCREF(value);      Py_XSETREF(op->func_kwdefaults, value);      return 0; @@ -507,6 +544,9 @@ func_new_impl(PyTypeObject *type, PyCodeObject *code, PyObject *globals,              }          }      } +    if (PySys_Audit("function.__new__", "O", code) < 0) { +        return NULL; +    }      newfunc = (PyFunctionObject *)PyFunction_New((PyObject *)code,                                                   globals);  | 
