[rtems commit] shell/main_edit.c: Fix string truncation warning

Sebastian Huber sebh at rtems.org
Thu Oct 15 17:23:00 UTC 2020


Module:    rtems
Branch:    master
Commit:    1dbd1079a5344c3c67d6bf75b04319725b02ce62
Changeset: http://git.rtems.org/rtems/commit/?id=1dbd1079a5344c3c67d6bf75b04319725b02ce62

Author:    Frank Kühndel <frank.kuehndel at embedded-brains.de>
Date:      Mon Oct 12 18:50:24 2020 +0200

shell/main_edit.c: Fix string truncation warning

Using strlcpy() instead of strncpy():

1) Prevents the compiler warnings
2) Ensures, the string is NUL terminated.
3) Avoids that strncpy() unnecessary fills the unused part of the buffer with
   0 bytes.

(Note that realpath() also returns NULL if the file does not exist - that
happens always if someone creates a new file with the editor of the shell.)

---

 cpukit/libmisc/shell/main_edit.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/cpukit/libmisc/shell/main_edit.c b/cpukit/libmisc/shell/main_edit.c
index 02214bd..a011049 100644
--- a/cpukit/libmisc/shell/main_edit.c
+++ b/cpukit/libmisc/shell/main_edit.c
@@ -283,11 +283,13 @@ static void delete_editor(struct editor *ed) {
 }
 
 static struct editor *find_editor(struct env *env, char *filename) {
-  char fn[PATH_MAX];
+  char fnbuf[PATH_MAX];
+  char *fn = fnbuf;
   struct editor *ed = env->current;
   struct editor *start = ed;
 
-  if (!realpath(filename, fn)) strncpy(fn, filename, FILENAME_MAX);
+  /* Note: When realpath() == NULL, usually the file doesn't exist */
+  if (!realpath(filename, fn)) { fn = filename; }
 
   do {
     if (strcmp(fn, ed->filename) == 0) return ed;
@@ -298,7 +300,7 @@ static struct editor *find_editor(struct env *env, char *filename) {
 
 static int new_file(struct editor *ed, char *filename) {
   if (*filename) {
-    strncpy(ed->filename, filename, FILENAME_MAX);
+    strlcpy(ed->filename, filename, sizeof(ed->filename));
   } else {
     sprintf(ed->filename, "Untitled-%d", ++ed->env->untitled);
     ed->newfile = 1;
@@ -1776,8 +1778,8 @@ static void save_editor(struct editor *ed) {
         return;
       }
     }
-    strncpy(
-      ed->filename, (const char*) ed->env->linebuf, FILENAME_MAX);
+    strlcpy(
+      ed->filename, (const char*) ed->env->linebuf, sizeof(ed->filename));
     ed->newfile = 0;
   }
 



More information about the vc mailing list