diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2006-11-09 20:41:36 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2006-11-09 20:41:36 +0100 |
commit | 6acf0b3843737f9f95298465fdcf0d532c1995a4 (patch) | |
tree | 7b24e95f788af258a0bf4ce1adb2f667e58293e5 /libgomp | |
parent | 0ad12cd3b586778ac750bfd9172a68fe0d6a4140 (diff) | |
download | gcc-6acf0b3843737f9f95298465fdcf0d532c1995a4.zip gcc-6acf0b3843737f9f95298465fdcf0d532c1995a4.tar.gz gcc-6acf0b3843737f9f95298465fdcf0d532c1995a4.tar.bz2 |
env.c (parse_schedule): Reject out of range values.
* env.c (parse_schedule): Reject out of range values.
(parse_unsigned_long): Reject out of range, negative or zero values.
From-SVN: r118626
Diffstat (limited to 'libgomp')
-rw-r--r-- | libgomp/ChangeLog | 6 | ||||
-rw-r--r-- | libgomp/env.c | 14 |
2 files changed, 18 insertions, 2 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 139b7fc..d0e94d2 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,9 @@ +2006-11-09 Uros Bizjak <ubizjak@gmail.com> + + * env.c (parse_schedule): Reject out of range values. + (parse_unsigned_long): Reject out of range, negative or zero values. + + 2006-10-29 Jakub Jelinek <jakub@redhat.com> PR fortran/29629 diff --git a/libgomp/env.c b/libgomp/env.c index 0a80b87..af7e0c5 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') |