diff options
Diffstat (limited to '0003-Better-handling-for-realpath-failures-in-windows_mak.patch')
-rw-r--r-- | 0003-Better-handling-for-realpath-failures-in-windows_mak.patch | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/0003-Better-handling-for-realpath-failures-in-windows_mak.patch b/0003-Better-handling-for-realpath-failures-in-windows_mak.patch new file mode 100644 index 0000000..4a74ce1 --- /dev/null +++ b/0003-Better-handling-for-realpath-failures-in-windows_mak.patch @@ -0,0 +1,52 @@ +From cc58015ddf527b4344183c4c3e2dcc4333457011 Mon Sep 17 00:00:00 2001 +From: Jon Turney <jon.turney@dronecode.org.uk> +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 + |