assert element size does not overflow the simple buffer in radsort

This commit is contained in:
Nikita Smith
2026-02-05 19:43:47 -08:00
parent 09472fafbd
commit ae236f5ccf
+7
View File
@@ -112,8 +112,15 @@ typedef void rs_small_sort_func( void * left, size_t n, size_t element_size, is_
#define RS_SMALL_FLIP_TO_INSERTION_GT_SIZE sizeof( size_t ) #define RS_SMALL_FLIP_TO_INSERTION_GT_SIZE sizeof( size_t )
typedef struct RS_MAX_BUBBLE_BUF { char b[RS_SMALL_FLIP_TO_INSERTION_GT_SIZE]; } RS_MAX_BUBBLE_BUF; typedef struct RS_MAX_BUBBLE_BUF { char b[RS_SMALL_FLIP_TO_INSERTION_GT_SIZE]; } RS_MAX_BUBBLE_BUF;
#if _MSC_VER
# define radsort_break_ __debugbreak()
#else
# define radsort_break_ ___builtin_trap()
#endif
#define radsort( start, len, is_before_func ) \ #define radsort( start, len, is_before_func ) \
do { \ do { \
if (sizeof((start)[0]) > sizeof(RS_MAX_SIMPLE_BUF)) { radsort_break_; } \
char __rs_tmp[ sizeof( (start)[0] ) ]; \ char __rs_tmp[ sizeof( (start)[0] ) ]; \
radsortinternal( start, len, sizeof( (start)[0] ), \ radsortinternal( start, len, sizeof( (start)[0] ), \
is_before_func, \ is_before_func, \