diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2008-11-24 17:05:43 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2008-11-24 17:05:43 +0000 |
commit | a0b7aece708587e6c4a33d9c62fd0fe73b990b6b (patch) | |
tree | 2444e61df22afca27ae6618b923afff1919e7d8c | |
parent | d962ef8246f50ac5726c6b82881074ccab47f822 (diff) | |
download | gdb-a0b7aece708587e6c4a33d9c62fd0fe73b990b6b.zip gdb-a0b7aece708587e6c4a33d9c62fd0fe73b990b6b.tar.gz gdb-a0b7aece708587e6c4a33d9c62fd0fe73b990b6b.tar.bz2 |
Fix access of an already freed memory.
* parse.c (parse_field_expression): Call xstrdup on `*name'.
* completer.c (expression_completer): Free fieldname.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/completer.c | 2 | ||||
-rw-r--r-- | gdb/parse.c | 6 |
3 files changed, 13 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c8d4039..faf0053 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2008-11-24 Jan Kratochvil <jan.kratochvil@redhat.com> + + Fix access of an already freed memory. + * parse.c (parse_field_expression): Call xstrdup on `*name'. + * completer.c (expression_completer): Free fieldname. + 2008-11-24 Daniel Jacobowitz <dan@codesourcery.com> PR gdb/2474 diff --git a/gdb/completer.c b/gdb/completer.c index e7ee817..d109140 100644 --- a/gdb/completer.c +++ b/gdb/completer.c @@ -414,9 +414,11 @@ expression_completer (char *text, char *word) add_struct_fields (type, &out, result, fieldname, flen); result[out] = NULL; + xfree (fieldname); return result; } } + xfree (fieldname); /* Commands which complete on locations want to see the entire argument. */ diff --git a/gdb/parse.c b/gdb/parse.c index 6200e81..3575306 100644 --- a/gdb/parse.c +++ b/gdb/parse.c @@ -1090,7 +1090,8 @@ parse_expression (char *string) /* Parse STRING as an expression. If parsing ends in the middle of a field reference, return the type of the left-hand-side of the reference; furthermore, if the parsing ends in the field name, - return the field name in *NAME. In all other cases, return NULL. */ + return the field name in *NAME. In all other cases, return NULL. + Returned non-NULL *NAME must be freed by the caller. */ struct type * parse_field_expression (char *string, char **name) @@ -1120,6 +1121,9 @@ parse_field_expression (char *string, char **name) xfree (exp); return NULL; } + /* (*NAME) is a part of the EXP memory block freed below. */ + *name = xstrdup (*name); + val = evaluate_subexpression_type (exp, subexp); xfree (exp); |