@@ -596,14 +596,18 @@ PyMarshal_WriteObjectToFile(PyObject *x, FILE *fp, int version)
596596{
597597 char buf [BUFSIZ ];
598598 WFILE wf ;
599+ if (PySys_Audit ("marshal.dumps" , "Oi" , x , version ) < 0 ) {
600+ return ; /* caller must check PyErr_Occurred() */
601+ }
599602 memset (& wf , 0 , sizeof (wf ));
600603 wf .fp = fp ;
601604 wf .ptr = wf .buf = buf ;
602605 wf .end = wf .ptr + sizeof (buf );
603606 wf .error = WFERR_OK ;
604607 wf .version = version ;
605- if (w_init_refs (& wf , version ))
606- return ; /* caller mush check PyErr_Occurred() */
608+ if (w_init_refs (& wf , version )) {
609+ return ; /* caller must check PyErr_Occurred() */
610+ }
607611 w_object (x , & wf );
608612 w_clear_refs (& wf );
609613 w_flush (& wf );
@@ -1368,12 +1372,6 @@ r_object(RFILE *p)
13681372 goto code_error ;
13691373
13701374 Py_ssize_t nlocalsplus = PyTuple_GET_SIZE (localsplusnames );
1371- if (PySys_Audit ("code.__new__" , "OOOiiiiii" ,
1372- code , filename , name , argcount , posonlyargcount ,
1373- kwonlyargcount , nlocalsplus , stacksize ,
1374- flags ) < 0 ) {
1375- goto code_error ;
1376- }
13771375
13781376 struct _PyCodeConstructor con = {
13791377 .filename = filename ,
@@ -1460,6 +1458,15 @@ read_object(RFILE *p)
14601458 fprintf (stderr , "XXX readobject called with exception set\n" );
14611459 return NULL ;
14621460 }
1461+ if (p -> ptr && p -> end ) {
1462+ if (PySys_Audit ("marshal.loads" , "y#" , p -> ptr , (Py_ssize_t )(p -> end - p -> ptr )) < 0 ) {
1463+ return NULL ;
1464+ }
1465+ } else if (p -> fp || p -> readable ) {
1466+ if (PySys_Audit ("marshal.load" , NULL ) < 0 ) {
1467+ return NULL ;
1468+ }
1469+ }
14631470 v = r_object (p );
14641471 if (v == NULL && !PyErr_Occurred ())
14651472 PyErr_SetString (PyExc_TypeError , "NULL object in marshal data for object" );
@@ -1556,7 +1563,7 @@ PyMarshal_ReadObjectFromFile(FILE *fp)
15561563 rf .refs = PyList_New (0 );
15571564 if (rf .refs == NULL )
15581565 return NULL ;
1559- result = r_object (& rf );
1566+ result = read_object (& rf );
15601567 Py_DECREF (rf .refs );
15611568 if (rf .buf != NULL )
15621569 PyMem_Free (rf .buf );
@@ -1577,7 +1584,7 @@ PyMarshal_ReadObjectFromString(const char *str, Py_ssize_t len)
15771584 rf .refs = PyList_New (0 );
15781585 if (rf .refs == NULL )
15791586 return NULL ;
1580- result = r_object (& rf );
1587+ result = read_object (& rf );
15811588 Py_DECREF (rf .refs );
15821589 if (rf .buf != NULL )
15831590 PyMem_Free (rf .buf );
@@ -1589,6 +1596,9 @@ PyMarshal_WriteObjectToString(PyObject *x, int version)
15891596{
15901597 WFILE wf ;
15911598
1599+ if (PySys_Audit ("marshal.dumps" , "Oi" , x , version ) < 0 ) {
1600+ return NULL ;
1601+ }
15921602 memset (& wf , 0 , sizeof (wf ));
15931603 wf .str = PyBytes_FromStringAndSize ((char * )NULL , 50 );
15941604 if (wf .str == NULL )
0 commit comments