summaryrefslogtreecommitdiffstats
path: root/0003-Better-handling-for-realpath-failures-in-windows_mak.patch
diff options
context:
space:
mode:
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.patch52
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
+