7575#endif
7676#define INTERP_STATE_BUFFER_SIZE MAX(INTERP_STATE_MIN_SIZE, 256)
7777
78-
78+ #define MAX_TLBC_SIZE 2048
7979
8080// Copied from Modules/_asynciomodule.c because it's not exported
8181
@@ -1594,10 +1594,16 @@ cache_tlbc_array(RemoteUnwinderObject *unwinder, uintptr_t code_addr, uintptr_t
15941594 return 0 ; // Invalid size
15951595 }
15961596
1597+ if (tlbc_size > MAX_TLBC_SIZE ) {
1598+ PyErr_SetString (PyExc_RuntimeError , "TLBC array size exceeds maximum limit" );
1599+ return 0 ; // Invalid size
1600+ }
1601+
15971602 // Allocate and read the entire TLBC array
15981603 size_t array_data_size = tlbc_size * sizeof (void * );
15991604 tlbc_array = PyMem_RawMalloc (sizeof (Py_ssize_t ) + array_data_size );
16001605 if (!tlbc_array ) {
1606+ PyErr_NoMemory ();
16011607 set_exception_cause (unwinder , PyExc_MemoryError , "Failed to allocate TLBC array" );
16021608 return 0 ; // Memory error
16031609 }
@@ -1611,6 +1617,7 @@ cache_tlbc_array(RemoteUnwinderObject *unwinder, uintptr_t code_addr, uintptr_t
16111617 // Create cache entry
16121618 entry = PyMem_RawMalloc (sizeof (TLBCCacheEntry ));
16131619 if (!entry ) {
1620+ PyErr_NoMemory ();
16141621 PyMem_RawFree (tlbc_array );
16151622 set_exception_cause (unwinder , PyExc_MemoryError , "Failed to allocate TLBC cache entry" );
16161623 return 0 ; // Memory error
@@ -1791,6 +1798,7 @@ parse_code_object(RemoteUnwinderObject *unwinder,
17911798
17921799 meta = PyMem_RawMalloc (sizeof (CachedCodeMetadata ));
17931800 if (!meta ) {
1801+ PyErr_NoMemory ();
17941802 set_exception_cause (unwinder , PyExc_MemoryError , "Failed to allocate cached code metadata" );
17951803 goto error ;
17961804 }
0 commit comments