diff options
author | Jim Blandy <jimb@codesourcery.com> | 2005-04-29 00:04:06 +0000 |
---|---|---|
committer | Jim Blandy <jimb@codesourcery.com> | 2005-04-29 00:04:06 +0000 |
commit | 5dd9ee310fb985a4911da08c3d6c53a7ab94a6f0 (patch) | |
tree | 941a708b5f978a8dd64d9f4124d1f2c0f5b982bc /gdb/parse.c | |
parent | 0c8653cf7d81ea778cda0d7b71ef804f7ce53ba3 (diff) | |
download | gdb-5dd9ee310fb985a4911da08c3d6c53a7ab94a6f0.tar.gz |
* parse.c (namecopy): Change allocation conventions.
(namecopy_size): New variable.
(copy_name): Allocate namecopy using xrealloc, instead of assuming
it has adequate space allocated to it.
(parse_exp_1): Don't try to allocate space for namecopy here.
Diffstat (limited to 'gdb/parse.c')
-rw-r--r-- | gdb/parse.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/gdb/parse.c b/gdb/parse.c index 0fa2459cb88..4ec96c6a1e3 100644 --- a/gdb/parse.c +++ b/gdb/parse.c @@ -76,9 +76,18 @@ union type_stack_elt *type_stack; int type_stack_depth, type_stack_size; char *lexptr; char *prev_lexptr; -char *namecopy; int paren_depth; int comma_terminates; + +/* A temporary buffer for identifiers, so we can null-terminate them. + + We allocate this with xrealloc. parse_exp_1 used to allocate with + alloca, using the size of the whole expression as a conservative + estimate of the space needed. However, macro expansion can + introduce names longer than the original expression; there's no + practical way to know beforehand how large that might be. */ +char *namecopy; +size_t namecopy_size; static int expressiondebug = 0; static void @@ -758,8 +767,16 @@ find_template_name_end (char *p) char * copy_name (struct stoken token) { + /* Make sure there's enough space for the token. */ + if (namecopy_size < token.length + 1) + { + namecopy_size = token.length + 1; + namecopy = xrealloc (namecopy, token.length + 1); + } + memcpy (namecopy, token.ptr, token.length); namecopy[token.length] = 0; + return namecopy; } @@ -1044,7 +1061,6 @@ parse_exp_in_context (char **stringptr, struct block *block, int comma, else expression_context_block = get_selected_block (&expression_context_pc); - namecopy = (char *) alloca (strlen (lexptr) + 1); expout_size = 10; expout_ptr = 0; expout = (struct expression *) |