From d6a952df1472b48d5ee54bfa26d6da5024fb0dce Mon Sep 17 00:00:00 2001 From: Daniel Franke Date: Sun, 17 Dec 2006 18:27:47 -0500 Subject: [PATCH] backport: [multiple changes] 2006-12-18 Daniel Franke Backport from mainline: 2006-12-04 Daniel Franke PR libgomp/29949 * env.c (omp_set_num_threads): Set illegal thread count to 1. Backport from mainline: 2006-11-09 Uros Bizjak * env.c (parse_schedule): Reject out of range values. (parse_unsigned_long): Reject out of range, negative or zero values. From-SVN: r119995 --- libgomp/ChangeLog | 15 +++++++++++++++ libgomp/env.c | 16 +++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index d3f473ff3490..0c7264682837 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,18 @@ +2006-12-18 Daniel Franke + + Backport from mainline: + 2006-12-04 Daniel Franke + + PR libgomp/29949 + * env.c (omp_set_num_threads): Set illegal thread count to 1. + + Backport from mainline: + 2006-11-09 Uros Bizjak + + * env.c (parse_schedule): Reject out of range values. + (parse_unsigned_long): Reject out of range, negative + or zero values. + 2006-12-04 Eric Botcazou * configure: Regenerate. diff --git a/libgomp/env.c b/libgomp/env.c index 0a80b87c5f53..f07b31b914b3 100644 --- a/libgomp/env.c +++ b/libgomp/env.c @@ -49,6 +49,7 @@ static void parse_schedule (void) { char *env, *end; + unsigned long value; env = getenv ("OMP_SCHEDULE"); if (env == NULL) @@ -85,11 +86,17 @@ parse_schedule (void) if (*env == '\0') goto invalid; - gomp_run_sched_chunk = strtoul (env, &end, 10); + errno = 0; + value = strtoul (env, &end, 10); + if (errno) + goto invalid; + while (isspace ((unsigned char) *end)) ++end; if (*end != '\0') goto invalid; + + gomp_run_sched_chunk = value; return; unknown: @@ -99,7 +106,6 @@ parse_schedule (void) invalid: gomp_error ("Invalid value for chunk size in " "environment variable OMP_SCHEDULE"); - gomp_run_sched_chunk = 1; return; } @@ -121,7 +127,11 @@ parse_unsigned_long (const char *name, unsigned long *pvalue) if (*env == '\0') goto invalid; + errno = 0; value = strtoul (env, &end, 10); + if (errno || (long) value <= 0) + goto invalid; + while (isspace ((unsigned char) *end)) ++end; if (*end != '\0') @@ -215,7 +225,7 @@ initialize_env (void) void omp_set_num_threads (int n) { - gomp_nthreads_var = n; + gomp_nthreads_var = (n > 0 ? n : 1); } void