# HG changeset patch # User Tassilo Philipp # Date 1643454176 -3600 # Node ID 1c18c2377c24c2ae34ab2ad36f9521e15e431f70 # Parent 90b1d927912abb048965afcd4b751b3a726de53f suite_aggr: - bounds checking memory of struct return values, to spot overflow errors by dcCallStruct - added clearing of space aggregate data is written to, to be in line with other data which is cleared - some optimization diff -r 90b1d927912a -r 1c18c2377c24 test/suite_aggrs/globals.c --- a/test/suite_aggrs/globals.c Fri Jan 28 14:11:21 2022 +0100 +++ b/test/suite_aggrs/globals.c Sat Jan 29 12:02:56 2022 +0100 @@ -49,19 +49,22 @@ } } -static int calc_max_aggr_size() +int get_max_aggr_size() { - int i, s = 0; - for(i=0; i s) - s = G_agg_sizes[i]; + static int s = 0; + int i; + if(s == 0) { + for(i=0; i s) + s = G_agg_sizes[i]; + } return s; } void init_test_data() { int i; - int maxaggrsize = calc_max_aggr_size(); + int maxaggrsize = get_max_aggr_size(); #define X(CH,T) V_##CH = (T*) malloc(sizeof(T)*(G_maxargs+1)); K_##CH = (T*) malloc(sizeof(T)*(G_maxargs+1)); DEF_TYPES #undef X @@ -84,7 +87,7 @@ void clear_V() { static int aggr_init = 0; - int maxaggrsize = calc_max_aggr_size(); + int maxaggrsize = get_max_aggr_size(); int i; for(i=0;i sizeof(long long) ? (long long*)((char*)V_a[0] + rtype_size) : NULL; + if(adj_ll) + *adj_ll = 0x0123456789abcdef; + + s = ((int(*)(const void*,const void*))rtype_st_cmp)(dcCallStruct(p, t, rtype_st, V_a[0]), K_a[pos]); + + if(*adj_ll != 0x0123456789abcdef) { + printf("writing rval overflowed into adjacent memory;"); + return 0; + } break; } default: printf("unknown rtype '%c'", rtype); return 0;