First patch attempt for PATH_MAX fix in ruby1.9.1- 1.9.3~rc1-3
Hi,
Below is a patch attempt to solve the PATH_MAX issue on the latest
ruby1.9.1.
When applied ruby builds with tests disabled. Please let me know if
there are remaining +-1 issues and if malloc/free (heap) should be
preferred before alloca (stack).
Thanks!
diff -u ruby1.9.1-1.9.3~rc1/addr2line.c ruby1.9.1-1.9.3~rc1.modified/addr2line.c
--- ruby1.9.1-1.9.3~rc1/addr2line.c 2011-07-08 14:23:10.000000000 +0200
+++ ruby1.9.1-1.9.3~rc1.modified/addr2line.c 2011-10-13 22:20:48.000000000 +0200
@@ -81,7 +81,7 @@
} line_info_t;
/* Avoid consuming stack as this module may be used from signal handler */
-static char binary_filename[PATH_MAX];
+static char *binary_filename = NULL;
static unsigned long
uleb128(char **p) {
@@ -407,6 +407,7 @@
by some linux distributions. See GDB's info for detail. */
static const char global_debug_dir[] = "/usr/lib/debug";
char *p, *subdir;
+ size_t len;
p = strrchr(binary_filename, '/');
if (!p) {
@@ -416,11 +417,12 @@
subdir = (char *)alloca(strlen(binary_filename) + 1);
strcpy(subdir, binary_filename);
+ len = strlen(binary_filename) + strlen(subdir) + strlen(debuglink) + 1;
+ binary_filename = (char*)alloca(len);
strcpy(binary_filename, global_debug_dir);
- strncat(binary_filename, subdir,
- PATH_MAX - strlen(binary_filename) - 1);
- strncat(binary_filename, debuglink,
- PATH_MAX - strlen(binary_filename) - 1);
+ strncat(binary_filename, subdir, strlen(subdir));
+ strncat(binary_filename, debuglink, strlen(debuglink));
+ binary_filename[len] = '\0';
munmap(current_line->mapped, current_line->mapped_size);
close(current_line->fd);
@@ -569,6 +571,7 @@
continue;
}
+ binary_filename = (char *)(alloca(len) + 1);
strncpy(binary_filename, path, len);
binary_filename[len] = '\0';
Reply to: