public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "jb at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug libfortran/60324] Handle arbitrarily long path names
Date: Thu, 13 Nov 2014 12:05:00 -0000	[thread overview]
Message-ID: <bug-60324-4-jwyEfhDJEY@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-60324-4@http.gcc.gnu.org/bugzilla/>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60324

--- Comment #8 from Janne Blomqvist <jb at gcc dot gnu.org> ---
Author: jb
Date: Thu Nov 13 12:05:01 2014
New Revision: 217480

URL: https://gcc.gnu.org/viewcvs?rev=217480&root=gcc&view=rev
Log:
PR 60324 Unbounded stack allocations in libgfortran.

2014-11-13  Janne Blomqvist  <jb@gcc.gnu.org>

    PR libfortran/60324
    * configure: Regenerated.
    * configure.ac (AM_CFLAGS): Add Werror=vla.
    * libgfortran.h (gfc_alloca): Remove macro.
    (fc_strdup_notrim): New prototype.
    * intrinsics/access.c (access_func): Use fc_strdup rather than
    stack allocation.
    * intrinsics/chdir.c (chdir_i4_sub): Likewise.
    (chdir_i8_sub): Likewise.
    * intrinsics/chmod.c (chmod_internal): New function, move logic
    here.
    (chmod_func): Call chmod_internal.
    * intrinsics/env.c (getenv): Use fc_strdup rather than stack
    allocation.
    (get_environment_variable_i4): Likewise.
    * intrinsics/execute_command_line.c (execute_command_line):
    Likewise.
    * intrinsics/hostnm.c (hostnm_0): New function, use static buffer
    rather than VLA.
    (hostnm_i4_sub): Call hostnm_0.
    (hostnm_i8_sub): Likewise.
    (hostnm): Likewise.
    * intrinsics/link.c (link_internal): New function, use fc_strdup
    rather than stack allocation.
    (link_i4_sub): Call link_internal.
    (link_i8_sub): Likewise.
    (link_i4): Likewise.
    (link_i8): Likewise.
    * intrinsics/perror.c (perror_sub): Use fc_strdup rather than
    stack allocation.
    * intrinsics/random.c (random_seed_i4): Use static buffer rather
    than VLA, use _Static_assert to make sure it's big enough.
    * intrinsics/rename.c (rename_internal): New function, use
    fc_strdup rather than stack allocation.
    (rename_i4_sub): Call rename_internal.
    (rename_i8_sub): Likewise.
    (rename_i4): Likewise.
    (rename_i8): Likewise.
    * intrinsics/stat.c (stat_i4_sub_0): Use fc_strdup rather than
    stack allocation.
    (stat_i8_sub_0): Likewise.
    * intrinsics/symlink.c (symlnk_internal): New function, use
    fc_strdup rather than stack allocation.
    (symlnk_i4_sub): Call symlnk_internal.
    (symlnk_i8_sub): Likewise.
    (symlnk_i4): Likewise.
    (symlnk_i8): Likewise.
    * intrinsics/system.c (system_sub): Use fc_strdup rather than
    stack allocation.
    * intrinsics/unlink.c (unlink_i4_sub): Likewise.
    * io/file_pos.c (READ_CHUNK): Make it a macro rather than variable.
    * io/list_read.c (nml_get_obj_data): Use fixed stack buffer, fall
    back to xmalloc/free for large sizes.
    * io/read.c (read_f): Likewise.
    * io/transfer.c (MAX_READ): Make it a macro rather than variable.
    (WRITE_CHUNK): Likewise.
    * io/write_float.def (write_float): Use fixed stack buffer, fall
    back to xmalloc/free for large sizes.
    * runtime/string.c (fc_strdup_notrim): New function.

Modified:
    trunk/libgfortran/ChangeLog
    trunk/libgfortran/configure
    trunk/libgfortran/configure.ac
    trunk/libgfortran/intrinsics/access.c
    trunk/libgfortran/intrinsics/chdir.c
    trunk/libgfortran/intrinsics/chmod.c
    trunk/libgfortran/intrinsics/env.c
    trunk/libgfortran/intrinsics/execute_command_line.c
    trunk/libgfortran/intrinsics/hostnm.c
    trunk/libgfortran/intrinsics/link.c
    trunk/libgfortran/intrinsics/perror.c
    trunk/libgfortran/intrinsics/random.c
    trunk/libgfortran/intrinsics/rename.c
    trunk/libgfortran/intrinsics/stat.c
    trunk/libgfortran/intrinsics/symlnk.c
    trunk/libgfortran/intrinsics/system.c
    trunk/libgfortran/intrinsics/unlink.c
    trunk/libgfortran/io/file_pos.c
    trunk/libgfortran/io/list_read.c
    trunk/libgfortran/io/read.c
    trunk/libgfortran/io/transfer.c
    trunk/libgfortran/io/write_float.def
    trunk/libgfortran/libgfortran.h
    trunk/libgfortran/runtime/string.c


  parent reply	other threads:[~2014-11-13 12:05 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <bug-60324-4@http.gcc.gnu.org/bugzilla/>
2014-04-30 22:30 ` jb at gcc dot gnu.org
2014-05-22  3:52 ` jb at gcc dot gnu.org
2014-05-22 21:18 ` jb at gcc dot gnu.org
2014-06-08 16:44 ` fxcoudert at gcc dot gnu.org
2014-06-10 10:21 ` jb at gcc dot gnu.org
2014-07-14 22:03 ` townsend at astro dot wisc.edu
2014-07-15  6:09 ` jb at gcc dot gnu.org
2014-11-13 12:05 ` jb at gcc dot gnu.org [this message]
2014-11-13 12:07 ` jb at gcc dot gnu.org
2014-11-16  1:58 ` jb at gcc dot gnu.org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-60324-4-jwyEfhDJEY@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).