From cc58015ddf527b4344183c4c3e2dcc4333457011 Mon Sep 17 00:00:00 2001 From: Jon Turney Date: Wed, 13 Jan 2016 18:27:48 +0000 Subject: [PATCH 3/3] Better handling for realpath() failures in windows_make_so() on Cygwin Fix a memory leak which would occur in the case when the result of realpath() is greater than or equal to SO_NAME_MAX_PATH_SIZE. Distinguish between realpath() failing (returning NULL), and returning a path longer than SO_NAME_MAX_PATH_SIZE Warn rather than stopping with an error in those cases. Original patch from Tim Chick. Memory leak fix by Corinna Vinschen. --- gdb/windows-nat.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index 0d145ac..2e26286 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -619,13 +619,22 @@ windows_make_so (const char *name, LPVOID load_addr) else { char *rname = realpath (name, NULL); - if (rname && strlen (rname) < SO_NAME_MAX_PATH_SIZE) + if (rname) { - strcpy (so->so_name, rname); + if (strlen (rname) < SO_NAME_MAX_PATH_SIZE) + strcpy (so->so_name, rname); + else + { + warning (_("dll path \"%s\" too long"), rname); + strcpy (so->so_name, so->so_original_name); + } free (rname); } else - error (_("dll path too long")); + { + warning (_("dll path for \"%s\" can not be evaluated"), name); + strcpy (so->so_name, so->so_original_name); + } } /* Record cygwin1.dll .text start/end. */ p = strchr (so->so_name, '\0') - (sizeof ("/cygwin1.dll") - 1); -- 2.6.2