From 1dbd1079a5344c3c67d6bf75b04319725b02ce62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frank=20K=C3=BChndel?= Date: Mon, 12 Oct 2020 18:50:24 +0200 Subject: 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(-) (limited to 'cpukit') diff --git a/cpukit/libmisc/shell/main_edit.c b/cpukit/libmisc/shell/main_edit.c index 02214bd942..a0110495e8 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; } -- cgit v1.2.3