diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2007-12-26 03:37:01 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2007-12-26 03:37:01 +0000 |
commit | f15db427e1f3ad0a415abbe08cbd53f80e5e6eb8 (patch) | |
tree | b2c4f84f5769d56c6a5e2b5210b0725ea7b0492e | |
parent | 2e39477a2313bef24916e596f283a3a05d8bd9e8 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | libgfortran/io/transfer.c | 9 |
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; } |