File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -345,6 +345,53 @@ test_setallocators(PyMemAllocatorDomain domain)
345345 goto fail ;
346346 }
347347
348+ /* realloc(NULL, size) should behave like malloc(size) */
349+ size_t size3 = 100 ;
350+ void * ptr3 ;
351+ switch (domain ) {
352+ case PYMEM_DOMAIN_RAW :
353+ ptr3 = PyMem_RawRealloc (NULL , size3 );
354+ break ;
355+ case PYMEM_DOMAIN_MEM :
356+ ptr3 = PyMem_Realloc (NULL , size3 );
357+ break ;
358+ case PYMEM_DOMAIN_OBJ :
359+ ptr3 = PyObject_Realloc (NULL , size3 );
360+ break ;
361+ default :
362+ ptr3 = NULL ;
363+ break ;
364+ }
365+
366+ CHECK_CTX ("realloc(NULL, size)" );
367+ if (ptr3 == NULL ) {
368+ error_msg = "realloc(NULL, size) failed" ;
369+ goto fail ;
370+ }
371+ if (hook .realloc_ptr != NULL || hook .realloc_new_size != size3 ) {
372+ error_msg = "realloc(NULL, size) invalid parameters" ;
373+ goto fail ;
374+ }
375+
376+ hook .free_ptr = NULL ;
377+ switch (domain ) {
378+ case PYMEM_DOMAIN_RAW :
379+ PyMem_RawFree (ptr3 );
380+ break ;
381+ case PYMEM_DOMAIN_MEM :
382+ PyMem_Free (ptr3 );
383+ break ;
384+ case PYMEM_DOMAIN_OBJ :
385+ PyObject_Free (ptr3 );
386+ break ;
387+ }
388+
389+ CHECK_CTX ("realloc(NULL, size) free" );
390+ if (hook .free_ptr != ptr3 ) {
391+ error_msg = "unexpected pointer passed to free" ;
392+ goto fail ;
393+ }
394+
348395 res = Py_NewRef (Py_None );
349396 goto finally ;
350397
You can’t perform that action at this time.
0 commit comments