diff options
author | wl <wl> | 2009-11-24 13:32:17 +0000 |
---|---|---|
committer | wl <wl> | 2009-11-24 13:32:17 +0000 |
commit | be095a293e09eae67254f59ce878b1a36233b447 (patch) | |
tree | 12771a41c3eddc6429e2d931a8af1b4ea06dc931 /src/roff/troff/input.cpp | |
parent | 881991c468612d34c2a1bd96eb78f685153d2da6 (diff) | |
download | groff-be095a293e09eae67254f59ce878b1a36233b447.tar.gz |
Fix double frees and memory leaks.
* src/roff/troff/env.cpp (environment::make_tag): Use local object.
* src/roff/troff/input.cpp (input_stack::check_end_diversion): Free
`diversion_state' here.
(interpolate_arg): Fix memory leaks.
* src/roff/troff/mtsm.cpp (mtsm::pop_state): Don't free `sp->state'.
Diffstat (limited to 'src/roff/troff/input.cpp')
-rw-r--r-- | src/roff/troff/input.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/roff/troff/input.cpp b/src/roff/troff/input.cpp index 17d24515..7c816e83 100644 --- a/src/roff/troff/input.cpp +++ b/src/roff/troff/input.cpp @@ -531,6 +531,8 @@ void input_stack::check_end_diversion(input_iterator *t) { if (t->is_diversion) { div_level--; + if (diversion_state) + delete diversion_state; diversion_state = t->diversion_state; } } @@ -4398,6 +4400,7 @@ static void interpolate_arg(symbol nm) args += c; if (i != limit) args += ' '; + delete p; } if (limit > 0) { args += '\0'; @@ -4419,6 +4422,7 @@ static void interpolate_arg(symbol nm) args += '"'; if (i != limit) args += ' '; + delete p; } if (limit > 0) { args += '\0'; @@ -4438,6 +4442,7 @@ static void interpolate_arg(symbol nm) } if (input_stack::space_follows_arg(i)) args += ' '; + delete p; } if (limit > 0) { args += '\0'; |