OSDN Git Service

2004-01-27 Paul N. Hilfinger <hilfinger@gnat.com>
authorAndrew Cagney <cagney@redhat.com>
Wed, 28 Jan 2004 01:39:51 +0000 (01:39 +0000)
committerAndrew Cagney <cagney@redhat.com>
Wed, 28 Jan 2004 01:39:51 +0000 (01:39 +0000)
* breakpoint.c (breakpoint_re_set_one): Set b->cond, b->val, and
b->exp to NULL after freeing so that error during re-parsing or
evaluation of expressions associated with breakpoint don't
eventually lead to re-freeing of storage.
Committed by Andrew Cagney.

gdb/ChangeLog
gdb/breakpoint.c

index 7556773..3fa492d 100644 (file)
@@ -1,3 +1,11 @@
+2004-01-27  Paul N. Hilfinger  <hilfinger@gnat.com>
+       
+       * breakpoint.c (breakpoint_re_set_one): Set b->cond, b->val, and
+       b->exp to NULL after freeing so that error during re-parsing or
+       evaluation of expressions associated with breakpoint don't
+       eventually lead to re-freeing of storage.
+       Committed by Andrew Cagney.
+
 2004-01-27  Andrew Cagney  <cagney@redhat.com>
 
        * source.c (ambiguous_line_spec): Delete undefined declaration.
index 7f66a3c..a9bd979 100644 (file)
@@ -6970,12 +6970,22 @@ breakpoint_re_set_one (void *bint)
 
       /* So for now, just use a global context.  */
       if (b->exp)
-       xfree (b->exp);
+       {
+         xfree (b->exp);
+         /* Avoid re-freeing b->exp if an error during the call to
+             parse_expression.  */
+         b->exp = NULL;
+       }
       b->exp = parse_expression (b->exp_string);
       b->exp_valid_block = innermost_block;
       mark = value_mark ();
       if (b->val)
-       value_free (b->val);
+       {
+         value_free (b->val);
+         /* Avoid re-freeing b->val if an error during the call to
+             evaluate_expression.  */
+         b->val = NULL;
+       }
       b->val = evaluate_expression (b->exp);
       release_value (b->val);
       if (VALUE_LAZY (b->val) && breakpoint_enabled (b))
@@ -6985,7 +6995,12 @@ breakpoint_re_set_one (void *bint)
        {
          s = b->cond_string;
          if (b->cond)
-           xfree (b->cond);
+           {
+             xfree (b->cond);
+             /* Avoid re-freeing b->exp if an error during the call
+                to parse_exp_1.  */
+             b->cond = NULL;
+           }
          b->cond = parse_exp_1 (&s, (struct block *) 0, 0);
        }
       if (breakpoint_enabled (b))