aboutsummaryrefslogtreecommitdiff
path: root/libgomp
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2006-11-09 20:41:36 +0100
committerUros Bizjak <uros@gcc.gnu.org>2006-11-09 20:41:36 +0100
commit6acf0b3843737f9f95298465fdcf0d532c1995a4 (patch)
tree7b24e95f788af258a0bf4ce1adb2f667e58293e5 /libgomp
parent0ad12cd3b586778ac750bfd9172a68fe0d6a4140 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--libgomp/env.c14
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')