| https://bugs.gentoo.org/294045 |
| |
| From f68481cd98e1d8451dd16d6d1b1b3513110a5559 Mon Sep 17 00:00:00 2001 |
| From: wl <wl> |
| Date: Fri, 10 Apr 2009 18:13:29 +0000 |
| Subject: [PATCH] Fix a memory leak in troff for -Thtml. |
| Reported by Urs Eggli <Urs.Eggli@zuerich.ch>. |
| |
| * src/roff/troff/node.h (node::~node): Move to... |
| * src/roff/troff/node.cpp: Here. Free `state' and `push_state'. |
| --- |
| ChangeLog | 8 ++++++++ |
| src/roff/troff/node.cpp | 11 ++++++++++- |
| src/roff/troff/node.h | 4 ---- |
| 3 files changed, 18 insertions(+), 5 deletions(-) |
| |
| diff --git a/src/roff/troff/node.cpp b/src/roff/troff/node.cpp |
| index afe4998..58cf59a 100644 |
| --- a/src/roff/troff/node.cpp |
| +++ b/src/roff/troff/node.cpp |
| @@ -1811,6 +1811,14 @@ void suppress_output_file::really_transparent_char(unsigned char) |
| { |
| } |
| |
| +inline node::~node() |
| +{ |
| + if (state != 0) |
| + delete state; |
| + if (push_state != 0) |
| + delete push_state; |
| +} |
| + |
| /* glyphs, ligatures, kerns, discretionary breaks */ |
| |
| class charinfo_node : public node { |
| @@ -4643,7 +4651,7 @@ void hline_node::tprint(troff_output_file *out) |
| } |
| else { |
| hunits rem = x - w*i; |
| - if (rem > H0) |
| + if (rem > H0) { |
| if (n->overlaps_horizontally()) { |
| if (out->is_on()) |
| n->tprint(out); |
| @@ -4651,6 +4659,7 @@ void hline_node::tprint(troff_output_file *out) |
| } |
| else |
| out->right(rem); |
| + } |
| while (--i >= 0) |
| if (out->is_on()) |
| n->tprint(out); |
| diff --git a/src/roff/troff/node.h b/src/roff/troff/node.h |
| index a598ae5..9850be2 100644 |
| --- a/src/roff/troff/node.h |
| +++ b/src/roff/troff/node.h |
| @@ -132,10 +132,6 @@ inline node::node(node *n, statem *s, int divlevel) |
| state = 0; |
| } |
| |
| -inline node::~node() |
| -{ |
| -} |
| - |
| // 0 means it doesn't, 1 means it does, 2 means it's transparent |
| |
| int node_list_ends_sentence(node *); |
| -- |
| 1.7.1.1 |
| |