mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	 89a39461bf
			
		
	
	
		89a39461bf
		
	
	
	
	
		
			
			exposed in header files. Fixed a few comments in these headers. As we might have expected, writing down invariants systematically exposed a (minor) bug. In this case, function objects have a writeable func_code attribute, which could be set to code objects with the wrong number of free variables. Calling the resulting function segfaulted the interpreter. Added a corresponding test.
		
			
				
	
	
		
			28 lines
		
	
	
	
		
			653 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
	
		
			653 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Cell object interface */
 | |
| 
 | |
| #ifndef Py_CELLOBJECT_H
 | |
| #define Py_CELLOBJECT_H
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| typedef struct {
 | |
| 	PyObject_HEAD
 | |
| 	PyObject *ob_ref;	/* Content of the cell or NULL when empty */
 | |
| } PyCellObject;
 | |
| 
 | |
| PyAPI_DATA(PyTypeObject) PyCell_Type;
 | |
| 
 | |
| #define PyCell_Check(op) ((op)->ob_type == &PyCell_Type)
 | |
| 
 | |
| PyAPI_FUNC(PyObject *) PyCell_New(PyObject *);
 | |
| PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *);
 | |
| PyAPI_FUNC(int) PyCell_Set(PyObject *, PyObject *);
 | |
| 
 | |
| #define PyCell_GET(op) (((PyCellObject *)(op))->ob_ref)
 | |
| #define PyCell_SET(op, v) (((PyCellObject *)(op))->ob_ref = v)
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| #endif /* !Py_TUPLEOBJECT_H */
 |