Subject: bug#38794: 26.1; Warnings in w32 build

From: Cecilio Pardo <[email-masked]>
Date: Sun, 29 Dec 2019 17:04:41 +0100

Severity: wishlist
Tags: patch

I am getting some warnings building with mingw64, using gcc 9.2.0. It
complies about possible buffer overruns with sprintf. Maybe upgrade to snprintf?

This is the warnings message:

addpm.c: In function 'main':
addpm.c:291:37: warning: '\bin\' directive writing 5 bytes into a region of size between 2 and 261 [-Wformat-overflow=]
  291 |        sprintf (full_emacs_path, "%s\\bin\\%s", emacs_path, prog_name);
      |                                     ^~~~~~~
addpm.c:291:8: note: 'sprintf' output between 18 and 277 bytes into a destination of size 261
  291 |        sprintf (full_emacs_path, "%s\\bin\\%s", emacs_path, prog_name);
      |        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

diff --git a/nt/addpm.c b/nt/addpm.c
index 3fd1b1bdc0..7da1fb5424 100644
--- a/nt/addpm.c
+++ b/nt/addpm.c
@@ -257,7 +257,7 @@ main (int argc, char *argv[])
 	      char full_emacs_path[MAX_PATH + 1];
 	      IPersistFile *lnk;
 	      strcat (start_folder, "\\Emacs.lnk");
-	      sprintf (full_emacs_path, "%s\\bin\\%s", emacs_path, prog_name);
+	      snprintf (full_emacs_path, sizeof (full_emacs_path), "%s\\bin\\%s", emacs_path, prog_name);
 	      IShellLinkA_SetPath (shortcut, full_emacs_path);
 	      IShellLinkA_SetDescription (shortcut, "GNU Emacs");
 	      result = IShellLinkA_QueryInterface (shortcut, &IID_IPersistFile,
@@ -288,7 +288,7 @@ main (int argc, char *argv[])
 	      char full_emacs_path[MAX_PATH + 1];
 	      IPersistFile *lnk;
 	      strcat (start_folder, "\\Emacs.lnk");
-	      sprintf (full_emacs_path, "%s\\bin\\%s", emacs_path, prog_name);
+	      snprintf (full_emacs_path, sizeof (full_emacs_path), "%s\\bin\\%s", emacs_path, prog_name);
 	      IShellLinkA_SetPath (shortcut, full_emacs_path);
 	      IShellLinkA_SetDescription (shortcut, "GNU Emacs");
 	      result = IShellLinkA_QueryInterface (shortcut, &IID_IPersistFile,

-- 
Cecilio Pardo