From 372db67b4de04e6fe86a44fdad34c7d0ec14fe6a Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Wed, 1 Feb 2017 20:36:23 +0000 Subject: [PATCH] re PR ada/79309 (incorrectly bounded calls to strncat in adaint.c) PR ada/79309 * adaint.c (__gnat_killprocesstree): Fix broken string handling. Co-Authored-By: Jakub Jelinek From-SVN: r245103 --- gcc/ada/ChangeLog | 6 ++++++ gcc/ada/adaint.c | 10 ++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 8f394b03ca9..387cfbfc559 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2017-02-01 Eric Botcazou + Jakub Jelinek + + PR ada/79309 + * adaint.c (__gnat_killprocesstree): Fix broken string handling. + 2017-01-25 Maxim Ostapenko PR lto/79061 diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c index 54a1d6e25c3..e5fea3eefe0 100644 --- a/gcc/ada/adaint.c +++ b/gcc/ada/adaint.c @@ -3396,14 +3396,16 @@ void __gnat_killprocesstree (int pid, int sig_num) { if ((d->d_type & DT_DIR) == DT_DIR) { - char statfile[64] = { 0 }; + char statfile[64]; int _pid, _ppid; /* read /proc//stat */ - strncpy (statfile, "/proc/", sizeof(statfile)); - strncat (statfile, d->d_name, sizeof(statfile)); - strncat (statfile, "/stat", sizeof(statfile)); + if (strlen (d->d_name) >= sizeof (statfile) - sizeof ("/proc//stat")) + continue; + strcpy (statfile, "/proc/"); + strcat (statfile, d->d_name); + strcat (statfile, "/stat"); FILE *fd = fopen (statfile, "r"); -- 2.30.2