summaryrefslogtreecommitdiff
path: root/src/roff/troff/input.cpp
diff options
context:
space:
mode:
authorwl <wl>2009-11-24 13:32:17 +0000
committerwl <wl>2009-11-24 13:32:17 +0000
commitbe095a293e09eae67254f59ce878b1a36233b447 (patch)
tree12771a41c3eddc6429e2d931a8af1b4ea06dc931 /src/roff/troff/input.cpp
parent881991c468612d34c2a1bd96eb78f685153d2da6 (diff)
downloadgroff-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.cpp5
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';