gbranden pushed a commit to branch master
in repository groff.
commit e91aeb7cae691b5318803c52b1bf2939963cbfa2
Author: G. Branden Robinson <[email protected]>
AuthorDate: Mon May 25 03:28:49 2026 -0500
[tfmtodit]: Be more fastidious with heap memory.
* src/utils/tfmtodit/tfmtodit.cpp (struct char_list): Declare
destructor.
(char_list::~char_list): Define destructor free(3)ing memory allocated
by strdup(3) in constructor.
(main): Handle failure of strdup(3) as a fatal error. free(3) the
storage it allocates when done with it.
Continues the long process of fixing Savannah #68192.
---
ChangeLog | 13 +++++++++++++
src/utils/tfmtodit/tfmtodit.cpp | 11 +++++++++++
2 files changed, 24 insertions(+)
diff --git a/ChangeLog b/ChangeLog
index 28d4a9ba4..2a7de9ea9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2026-05-25 G. Branden Robinson <[email protected]>
+
+ [tfmtodit]: Be more fastidious with heap-allocated memory.
+
+ * src/utils/tfmtodit/tfmtodit.cpp (struct char_list): Declare
+ destructor.
+ (char_list::~char_list): Define destructor free(3)ing memory
+ allocated by strdup(3) in constructor.
+ (main): Handle failure of strdup(3) as a fatal error. free(3)
+ the storage it allocates when done with it.
+
+ Continues the long process of fixing Savannah #68192.
+
2026-05-25 G. Branden Robinson <[email protected]>
* src/utils/tfmtodit/tfmtodit.cpp (char_list::char_list, main):
diff --git a/src/utils/tfmtodit/tfmtodit.cpp b/src/utils/tfmtodit/tfmtodit.cpp
index c38e56e57..3a571b624 100644
--- a/src/utils/tfmtodit/tfmtodit.cpp
+++ b/src/utils/tfmtodit/tfmtodit.cpp
@@ -602,10 +602,12 @@ bool gf::skip(int n, FILE *fp)
}
+// TODO: Migrate to an STL container.
struct char_list {
char *ch;
char_list *next;
char_list(const char *, char_list * = 0);
+ ~char_list();
};
char_list::char_list(const char *s, char_list *p) : ch(strdup(s)),
@@ -613,6 +615,11 @@ char_list::char_list(const char *s, char_list *p) :
ch(strdup(s)),
{
}
+char_list::~char_list()
+{
+ free(ch);
+}
+
static bool read_map(const char *file, char_list **table)
{
@@ -799,7 +806,10 @@ int main(int argc, char **argv)
printf("name %s\n", font_file);
if (is_font_special)
fputs("special\n", stdout);
+ size_t amount = strlen(argv[optind]);
char *internal_name = strdup(argv[optind]);
+ if (0 /* nullptr */ == internal_name)
+ fatal("cannot allocate %1 bytes to copy tfm-file operand", amount);
size_t len = strlen(internal_name);
if ((len > 4) && (strcmp(internal_name + len - 4, ".tfm") == 0))
internal_name[len - 4] = '\0';
@@ -816,6 +826,7 @@ int main(int argc, char **argv)
sep++;
}
printf("internalname %s\n", s ? (s + 1) : internal_name);
+ free(internal_name);
int n;
if (t.get_param(2, &n)) {
if (n > 0)
_______________________________________________
groff-commit mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/groff-commit