From: Jason Molenda Date: Fri, 4 Dec 1998 04:46:18 +0000 (+0000) Subject: 1998-12-03 Jason Molenda (jsm@bugshack.cygnus.com) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=edc452d07d89e2e7f5ce7e8ea77a46d3d4a8d529;p=binutils-gdb.git 1998-12-03 Jason Molenda (jsm@bugshack.cygnus.com) * monitor.c (monitor_read_memory): Zero out pattern buffers before calling re_search. (parse_register_dump): Ditto. PR 18049. This bug had existed erratically since I upgraded to the new gnu-regex.c this last summer. The problem is mostly in parse_register_dump; the allocated structure has some random values in it and there is a flag set in the register_pattern structure by the gnu-regex library which indicates that the values in the re_registers should be trusted. If those arbitrary contents aren't zero, gnu-regex tries to run realloc on them and we get a core dump on some hosts for some targets when the moon is just right. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 324175701f8..1ef218176d9 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +1998-12-03 Jason Molenda (jsm@bugshack.cygnus.com) + + * monitor.c (monitor_read_memory): Zero out pattern buffers + before calling re_search. + (parse_register_dump): Ditto. Thu Dec 3 10:37:22 EST 1998 Zdenek Radouch (radouch@cygnus.com) @@ -5,7 +10,6 @@ Thu Dec 3 10:37:22 EST 1998 Zdenek Radouch (radouch@cygnus.com) * configure.tgt * fr30-tdep.c * config/fr30/tm-fr30.h - Thu Dec 3 16:30:35 1998 Andrew Cagney diff --git a/gdb/monitor.c b/gdb/monitor.c index 60cfc143e71..ddd24c25a94 100644 --- a/gdb/monitor.c +++ b/gdb/monitor.c @@ -847,6 +847,8 @@ parse_register_dump (buf, len) points to the start of the register value. */ struct re_registers register_strings; + memset (®ister_strings, 0, sizeof (struct re_registers)); + if (re_search (®ister_pattern, buf, len, 0, len, ®ister_strings) == -1) break; @@ -1759,6 +1761,7 @@ monitor_read_memory (memaddr, myaddr, len) struct re_registers resp_strings; RDEBUG(("MON getmem.resp_delim %s\n",current_monitor->getmem.resp_delim)) ; + memset (&resp_strings, 0, sizeof (struct re_registers)); tmp = strlen (p); retval = re_search (&getmem_resp_delim_pattern, p, tmp, 0, tmp, &resp_strings);