Index: ada-lang.c =================================================================== RCS file: /cvs/src/src/gdb/ada-lang.c,v retrieving revision 1.229 diff -u -p -r1.229 ada-lang.c --- ada-lang.c 2 Jul 2009 17:25:52 -0000 1.229 +++ ada-lang.c 19 Nov 2009 18:51:42 -0000 @@ -6505,7 +6505,7 @@ find_old_style_renaming_symbol (const ch qualified. This means we need to prepend the function name as well as adding the ``___XR'' suffix to build the name of the associated renaming symbol. */ - char *function_name = SYMBOL_LINKAGE_NAME (function_sym); + const char *function_name = SYMBOL_LINKAGE_NAME (function_sym); /* Function names sometimes contain suffixes used for instance to qualify nested subprograms. When building the XR type name, we need to make sure that this suffix is @@ -6514,9 +6514,11 @@ find_old_style_renaming_symbol (const ch const int function_name_len = ada_name_prefix_len (function_name); const int rename_len = function_name_len + 2 /* "__" */ + strlen (name) + 6 /* "___XR\0" */ ; + int bufsize = rename_len * sizeof (char); /* Strip the suffix if necessary. */ - function_name[function_name_len] = '\0'; + int end = (strlen (function_name) > function_name_len + ? function_name_len : strlen (function_name)); /* Library-level functions are a special case, as GNAT adds a ``_ada_'' prefix to the function name to avoid namespace @@ -6526,9 +6528,10 @@ find_old_style_renaming_symbol (const ch && strstr (function_name, "_ada_") == function_name) function_name = function_name + 5; - rename = (char *) alloca (rename_len * sizeof (char)); - xsnprintf (rename, rename_len * sizeof (char), "%s__%s___XR", - function_name, name); + rename = (char *) alloca (bufsize); + gdb_assert (end < bufsize); + strncpy (rename, function_name, end); + xsnprintf (rename, bufsize - end, "__%s___XR", name); } else {