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

Reply via email to