@@ -431,6 +431,7 @@ static void __kmp_stg_parse_par_range(char const *name, char const *value,
431
431
int *out_range, char *out_routine,
432
432
char *out_file, int *out_lb,
433
433
int *out_ub) {
434
+ const char *par_range_value;
434
435
size_t len = KMP_STRLEN (value) + 1 ;
435
436
par_range_to_print = (char *)KMP_INTERNAL_MALLOC (len + 1 );
436
437
KMP_STRNCPY_S (par_range_to_print, len + 1 , value, len + 1 );
@@ -439,11 +440,14 @@ static void __kmp_stg_parse_par_range(char const *name, char const *value,
439
440
__kmp_par_range_ub = INT_MAX;
440
441
for (;;) {
441
442
unsigned int len;
442
- if (*value == ' \0 ' ) {
443
+ if (!value || *value == ' \0 ' ) {
443
444
break ;
444
445
}
445
446
if (!__kmp_strcasecmp_with_sentinel (" routine" , value, ' =' )) {
446
- value = strchr (value, ' =' ) + 1 ;
447
+ par_range_value = strchr (value, ' =' ) + 1 ;
448
+ if (!par_range_value)
449
+ goto par_range_error;
450
+ value = par_range_value;
447
451
len = __kmp_readstr_with_sentinel (out_routine, value,
448
452
KMP_PAR_RANGE_ROUTINE_LEN - 1 , ' ,' );
449
453
if (len == 0 ) {
@@ -456,7 +460,10 @@ static void __kmp_stg_parse_par_range(char const *name, char const *value,
456
460
continue ;
457
461
}
458
462
if (!__kmp_strcasecmp_with_sentinel (" filename" , value, ' =' )) {
459
- value = strchr (value, ' =' ) + 1 ;
463
+ par_range_value = strchr (value, ' =' ) + 1 ;
464
+ if (!par_range_value)
465
+ goto par_range_error;
466
+ value = par_range_value;
460
467
len = __kmp_readstr_with_sentinel (out_file, value,
461
468
KMP_PAR_RANGE_FILENAME_LEN - 1 , ' ,' );
462
469
if (len == 0 ) {
@@ -470,7 +477,10 @@ static void __kmp_stg_parse_par_range(char const *name, char const *value,
470
477
}
471
478
if ((!__kmp_strcasecmp_with_sentinel (" range" , value, ' =' )) ||
472
479
(!__kmp_strcasecmp_with_sentinel (" incl_range" , value, ' =' ))) {
473
- value = strchr (value, ' =' ) + 1 ;
480
+ par_range_value = strchr (value, ' =' ) + 1 ;
481
+ if (!par_range_value)
482
+ goto par_range_error;
483
+ value = par_range_value;
474
484
if (KMP_SSCANF (value, " %d:%d" , out_lb, out_ub) != 2 ) {
475
485
goto par_range_error;
476
486
}
@@ -482,7 +492,10 @@ static void __kmp_stg_parse_par_range(char const *name, char const *value,
482
492
continue ;
483
493
}
484
494
if (!__kmp_strcasecmp_with_sentinel (" excl_range" , value, ' =' )) {
485
- value = strchr (value, ' =' ) + 1 ;
495
+ par_range_value = strchr (value, ' =' ) + 1 ;
496
+ if (!par_range_value)
497
+ goto par_range_error;
498
+ value = par_range_value;
486
499
if (KMP_SSCANF (value, " %d:%d" , out_lb, out_ub) != 2 ) {
487
500
goto par_range_error;
488
501
}
0 commit comments