diff -ruN groff-1.20.1/src/roff/troff/env.cpp groff-1.20.1-fixed/src/roff/troff/env.cpp --- groff-1.20.1/src/roff/troff/env.cpp 2009-01-09 15:25:52.000000000 +0100 +++ groff-1.20.1-fixed/src/roff/troff/env.cpp 2009-11-22 14:40:43.000000000 +0100 @@ -2213,14 +2213,15 @@ */ if (curdiv == topdiv && topdiv->before_first_page) topdiv->begin_page(); - macro *m = new macro; - m->append_str("devtag:"); + + macro m; + m.append_str("devtag:"); for (const char *p = nm; *p; p++) if (!invalid_input_char((unsigned char)*p)) - m->append(*p); - m->append(' '); - m->append_int(i); - return new special_node(*m); + m.append(*p); + m.append(' '); + m.append_int(i); + return new special_node(m); } return 0; } diff -ruN groff-1.20.1/src/roff/troff/input.cpp groff-1.20.1-fixed/src/roff/troff/input.cpp --- groff-1.20.1/src/roff/troff/input.cpp 2009-01-09 15:25:52.000000000 +0100 +++ groff-1.20.1-fixed/src/roff/troff/input.cpp 2009-11-22 14:40:43.000000000 +0100 @@ -530,6 +530,8 @@ { if (t->is_diversion) { div_level--; + if (diversion_state) + delete diversion_state; diversion_state = t->diversion_state; } } @@ -4367,6 +4369,7 @@ args += c; if (i != limit) args += ' '; + delete p; } if (limit > 0) { args += '\0'; @@ -4388,6 +4391,7 @@ args += '"'; if (i != limit) args += ' '; + delete p; } if (limit > 0) { args += '\0'; @@ -4407,6 +4411,7 @@ } if (input_stack::space_follows_arg(i)) args += ' '; + delete p; } if (limit > 0) { args += '\0';