aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2007-12-26 03:37:01 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2007-12-26 03:37:01 +0000
commitf15db427e1f3ad0a415abbe08cbd53f80e5e6eb8 (patch)
treeb2c4f84f5769d56c6a5e2b5210b0725ea7b0492e
parent2e39477a2313bef24916e596f283a3a05d8bd9e8 (diff)
downloadgcc-f15db427e1f3ad0a415abbe08cbd53f80e5e6eb8.zip
gcc-f15db427e1f3ad0a415abbe08cbd53f80e5e6eb8.tar.gz
gcc-f15db427e1f3ad0a415abbe08cbd53f80e5e6eb8.tar.bz2
transfer.c (read_sf): Check if readlen was less than the requested number of bytes to read and if so...
2007-12-25 Jerry DeLisle <jvdelisle@gcc.gnu.org> * io/transfer.c (read_sf): Check if readlen was less than the requested number of bytes to read and if so, generate error. From-SVN: r131177
-rw-r--r--libgfortran/ChangeLog5
-rw-r--r--libgfortran/io/transfer.c9
2 files changed, 13 insertions, 1 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 0db6850..b4f77b7 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,8 @@
+2007-12-25 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ * io/transfer.c (read_sf): Check if readlen was less than the requested
+ number of bytes to read and if so, generate error.
+
2007-12-25 Daniel Franke <franke.daniel@gmail.com>
PR fortran/34533
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index 5dddcd3..48f6033 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -166,7 +166,14 @@ read_sf (st_parameter_dt *dtp, int *length, int no_error)
{
readlen = *length;
q = salloc_r (dtp->u.p.current_unit->s, &readlen);
- memcpy (p, q, readlen);
+ if (readlen < *length)
+ {
+ generate_error (&dtp->common, LIBERROR_END, NULL);
+ return NULL;
+ }
+
+ if (q != NULL)
+ memcpy (p, q, readlen);
goto done;
}