From 7c7c5a80a46b38067e8288e1e3ccd2b9c7c73b6e Mon Sep 17 00:00:00 2001 From: cztchoice Date: Sat, 17 Oct 2015 12:18:26 +0800 Subject: add_pathsep(): Return false if filename is too long. References #3042 --- src/nvim/path.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'src/nvim/path.c') diff --git a/src/nvim/path.c b/src/nvim/path.c index cdb16dbef1..7e1183d5db 100644 --- a/src/nvim/path.c +++ b/src/nvim/path.c @@ -391,19 +391,22 @@ char *concat_fnames_realloc(char *fname1, const char *fname2, bool sep) fname2, len2, sep); } -/* - * Add a path separator to a file name, unless it already ends in a path - * separator. - */ -void add_pathsep(char *p) +/// Adds a path separator to a filename, unless it already ends in one. +/// +/// @return `true` if the path separator was added or already existed. +/// `false` if the filename is too long. +bool add_pathsep(char *p) FUNC_ATTR_NONNULL_ALL { const size_t len = strlen(p); - const size_t pathsep_len = sizeof(PATHSEPSTR); - assert(len < MAXPATHL - pathsep_len); if (*p != NUL && !after_pathsep(p, p + len)) { + const size_t pathsep_len = sizeof(PATHSEPSTR); + if (len > MAXPATHL - pathsep_len) { + return false; + } memcpy(p + len, PATHSEPSTR, pathsep_len); } + return true; } /// Get an allocated copy of the full path to a file. -- cgit