gbranden pushed a commit to branch master
in repository groff.

commit 6af159cc03b38f05f29bb0510a2b91886e1acc80
Author: G. Branden Robinson <g.branden.robin...@gmail.com>
AuthorDate: Wed Jul 30 19:35:03 2025 -0500

    [pre-grohtml]: Clear heap-allocated memory.
    
    * src/preproc/html/pre-html.cpp (get_line): Clear heap-allocated memory
      and annotate how we could do so in-language in C++03.
---
 ChangeLog                     |  5 +++++
 src/preproc/html/pre-html.cpp | 10 ++++++++--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index c08b9ae82..50102af6b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2025-07-30  G. Branden Robinson <g.branden.robin...@gmail.com>
+
+       * src/preproc/html/pre-html.cpp (get_line): Clear heap-allocated
+       memory and annotate how we could do so in-language in C++03.
+
 2025-07-30  G. Branden Robinson <g.branden.robin...@gmail.com>
 
        * src/preproc/html/pre-html.cpp (get_resolution)
diff --git a/src/preproc/html/pre-html.cpp b/src/preproc/html/pre-html.cpp
index 04233842c..ebf0953a8 100644
--- a/src/preproc/html/pre-html.cpp
+++ b/src/preproc/html/pre-html.cpp
@@ -262,6 +262,10 @@ void sys_fatal(const char *s)
 /*
  *  get_line - Copy a line (w/o newline) from a file to the
  *             global line buffer.
+ *
+ * TODO: Discard; migrate callers to POSIX `getline()`.
+ * https://pubs.opengroup.org/onlinepubs/9799919799/functions/\
+ *   getline.html
  */
 
 static bool get_line(FILE *f, const char *file_name, int lineno)
@@ -271,7 +275,8 @@ static bool get_line(FILE *f, const char *file_name, int 
lineno)
   if (0 /* nullptr */ == linebuf) {
     linebufsize = 128;
     try {
-      linebuf = new char[linebufsize];
+      linebuf = new char[linebufsize]; // C++03: new int[linebufsize]();
+      (void) memset(linebuf, '\0', (linebufsize * sizeof(char)));
     }
     catch (std::bad_alloc &e) {
       fatal_with_file_and_line(file_name, lineno, "cannot allocate %1"
@@ -298,7 +303,8 @@ static bool get_line(FILE *f, const char *file_name, int 
lineno)
       int newbufsize = linebufsize * 2;
       char *old_linebuf = linebuf;
       try {
-       linebuf = new char[newbufsize];
+       linebuf = new char[newbufsize]; // C++03: new int[newbufsize]();
+       (void) memset(linebuf, '\0', (newbufsize * sizeof(char)));
       }
       catch (std::bad_alloc &e) {
        fatal_with_file_and_line(file_name, lineno, "cannot allocate"

_______________________________________________
groff-commit mailing list
groff-commit@gnu.org
https://lists.gnu.org/mailman/listinfo/groff-commit

Reply via email to