patches/gdb/6.8/100-dwarf-stack-overflow.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue Aug 02 18:28:10 2011 +0200 (2011-08-02)
changeset 2590 b64cfb67944e
parent 570 301eb285ae7d
permissions -rw-r--r--
scripts/functions: svn retrieval first tries the mirror for tarballs

The svn download helper looks for the local tarballs dir to see if it
can find a pre-downloaded tarball, and if it does not find it, does
the actual fetch to upstream via svn.

In the process, it does not even try to get a tarball from the local
mirror, which can be useful if the mirror has been pre-populated
manually (or with a previously downloaded tree).

Fake a tarball get with the standard tarball-download helper, but
without specifying any upstream URL, which makes the helper directly
try the LAN mirror.

Of course, if no mirror is specified, no URL wil be available, and
the standard svn retrieval will kick in.

Reported-by: ANDY KENNEDY <ANDY.KENNEDY@adtran.com>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@570
     1
Original patch from gentoo: gentoo/src/patchsets/gdb/6.8/80_all_gdb-6.5-dwarf-stack-overflow.patch
yann@570
     2
-= BEGIN original header =-
yann@570
     3
http://bugs.gentoo.org/144833
yann@570
     4
yann@570
     5
for gdb/ChangeLog:
yann@570
     6
2006-08-22  Will Drewry <wad@google.com>
yann@570
     7
	    Tavis Ormandy <taviso@google.com>
yann@570
     8
yann@570
     9
	* dwarf2read.c (decode_locdesc): Enforce location description stack
yann@570
    10
	boundaries.
yann@570
    11
	* dwarfread.c (locval): Likewise.
yann@570
    12
yann@570
    13
-= END original header =-
yann@570
    14
diff -durN gdb-6.8.orig/gdb/dwarf2read.c gdb-6.8/gdb/dwarf2read.c
yann@570
    15
--- gdb-6.8.orig/gdb/dwarf2read.c	2008-03-10 15:18:10.000000000 +0100
yann@570
    16
+++ gdb-6.8/gdb/dwarf2read.c	2008-06-17 16:07:31.000000000 +0200
yann@570
    17
@@ -9124,8 +9124,7 @@
yann@570
    18
    callers will only want a very basic result and this can become a
yann@570
    19
    complaint.
yann@570
    20
 
yann@570
    21
-   Note that stack[0] is unused except as a default error return.
yann@570
    22
-   Note that stack overflow is not yet handled.  */
yann@570
    23
+   Note that stack[0] is unused except as a default error return. */
yann@570
    24
 
yann@570
    25
 static CORE_ADDR
yann@570
    26
 decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu)
yann@570
    27
@@ -9142,7 +9141,7 @@
yann@570
    28
 
yann@570
    29
   i = 0;
yann@570
    30
   stacki = 0;
yann@570
    31
-  stack[stacki] = 0;
yann@570
    32
+  stack[++stacki] = 0;
yann@570
    33
 
yann@570
    34
   while (i < size)
yann@570
    35
     {
yann@570
    36
@@ -9324,6 +9323,16 @@
yann@570
    37
 		     dwarf_stack_op_name (op));
yann@570
    38
 	  return (stack[stacki]);
yann@570
    39
 	}
yann@570
    40
+      /* Enforce maximum stack depth of size-1 to avoid ++stacki writing
yann@570
    41
+         outside of the allocated space. Also enforce minimum > 0.
yann@570
    42
+         -- wad@google.com 14 Aug 2006 */
yann@570
    43
+      if (stacki >= sizeof (stack) / sizeof (*stack) - 1)
yann@570
    44
+	internal_error (__FILE__, __LINE__,
yann@570
    45
+	                _("location description stack too deep: %d"),
yann@570
    46
+	                stacki);
yann@570
    47
+      if (stacki <= 0)
yann@570
    48
+	internal_error (__FILE__, __LINE__,
yann@570
    49
+	                _("location description stack too shallow"));
yann@570
    50
     }
yann@570
    51
   return (stack[stacki]);
yann@570
    52
 }