@@ -244,9 +244,11 @@ static int ompi_coll_tuned_read_rules_json (const opal_json_t *json_root, ompi_c
244
244
245
245
const opal_json_t * collectives_obj = NULL ;
246
246
const opal_json_t * comm_rule_array = NULL ;
247
+ const opal_json_t * comm_rule = NULL ;
248
+ const opal_json_t * msg_size_array = NULL ;
247
249
248
250
size_t num_collectives = 0 ;
249
- size_t num_comm_rules ;
251
+ size_t num_comm_rules = 0 ;
250
252
rc = opal_json_get_key (json_root , "collectives" , & collectives_obj );
251
253
if (rc != OPAL_SUCCESS ) {
252
254
opal_output_verbose (1 , ompi_coll_tuned_stream ,
@@ -269,15 +271,14 @@ static int ompi_coll_tuned_read_rules_json (const opal_json_t *json_root, ompi_c
269
271
opal_output_verbose (1 , ompi_coll_tuned_stream ,
270
272
"Internal json error when attempting to parse the collective at index %ld\n" ,
271
273
jcol );
272
- goto error_bad_coll ;
274
+ goto error_cleanup ;
273
275
}
274
276
coll_id = mca_coll_base_name_to_colltype (coll_name );
275
277
if (coll_id < 0 ) {
276
278
opal_output_verbose (1 , ompi_coll_tuned_stream ,
277
279
"Unrecognized collective: \"%s\". Use all lowercase such as \"allgather\"" ,
278
280
coll_name );
279
- opal_json_free (& comm_rule_array );
280
- goto error_bad_coll ;
281
+ goto error_cleanup ;
281
282
}
282
283
283
284
alg_p = & alg_rules [coll_id ];
@@ -287,14 +288,12 @@ static int ompi_coll_tuned_read_rules_json (const opal_json_t *json_root, ompi_c
287
288
opal_output_verbose (1 , ompi_coll_tuned_stream ,
288
289
"Problem parsing the collective at index %ld (for %s). Expected an array of comm-related rules." ,
289
290
jcol , mca_coll_base_colltype_to_str (coll_id ) );
290
- goto error_bad_coll ;
291
+ goto error_cleanup ;
291
292
}
292
293
alg_p -> n_com_sizes = (int )num_comm_rules ;
293
294
alg_p -> com_rules = ompi_coll_tuned_mk_com_rules (num_comm_rules , coll_id );
294
295
295
296
for (jcomm_rule = 0 ; jcomm_rule < num_comm_rules ; jcomm_rule ++ ) {
296
- const opal_json_t * comm_rule ;
297
- const opal_json_t * msg_size_array ;
298
297
size_t num_msg_rules ;
299
298
rc = opal_json_get_index (comm_rule_array , jcomm_rule , & comm_rule );
300
299
com_p = & (alg_p -> com_rules [jcomm_rule ]);
@@ -353,15 +352,16 @@ static int ompi_coll_tuned_read_rules_json (const opal_json_t *json_root, ompi_c
353
352
"Problem occurred within collective %s, "
354
353
"comm_size_min=%d, comm_size_max=%d (entry number %ld in the comm_size array), "
355
354
"message size entry number %ld." , coll_name , com_p -> mpi_comsize_min , com_p -> mpi_comsize_max , 1 + jcomm_rule , 1 + jmsg_rule );
356
- opal_json_free (& collectives_obj );
357
- return OMPI_ERROR ;
355
+ goto error_cleanup ;
358
356
error_bad_comm_rule :
359
357
opal_output_verbose (1 , ompi_coll_tuned_stream ,
360
358
"Problem occurred within collective %s, "
361
359
"in entry number %ld of the comm_size array" , coll_name , 1 + jcomm_rule );
362
- opal_json_free (& collectives_obj );
363
- return OMPI_ERROR ;
364
- error_bad_coll :
360
+ goto error_cleanup ;
361
+ error_cleanup :
362
+ opal_json_free (& msg_size_array );
363
+ opal_json_free (& comm_rule );
364
+ opal_json_free (& comm_rule_array );
365
365
opal_json_free (& collectives_obj );
366
366
return OMPI_ERROR ;
367
367
}
@@ -494,6 +494,11 @@ static int ompi_coll_tuned_read_rules_config_file_classic (char *fname, ompi_col
494
494
}
495
495
opal_output_verbose (25 , ompi_coll_tuned_stream ,
496
496
"Read communicator count %ld for dynamic rule for collective ID %ld\n" , NCOMSIZES , COLID );
497
+ if ( NCOMSIZES > INT_MAX ) {
498
+ opal_output_verbose (25 , ompi_coll_tuned_stream ,
499
+ "Refusing to proceed: suspiciously large number found for the number of communicator-based rules: %ld\n" , NCOMSIZES );
500
+ goto on_file_error ;
501
+ }
497
502
alg_p -> n_com_sizes = NCOMSIZES ;
498
503
alg_p -> com_rules = ompi_coll_tuned_mk_com_rules (NCOMSIZES , COLID );
499
504
if (NULL == alg_p -> com_rules ) {
0 commit comments