helpers.cpp: introduce safe_strncpy() and use it

Origin commit data
------------------
Branch: ni/coolstream
Commit: 72edb6b46d
Author: GetAway <get-away@t-online.de>
Date: 2019-06-18 (Tue, 18 Jun 2019)


------------------
No further description and justification available within origin commit message!

------------------
This commit was generated by Migit
This commit is contained in:
GetAway
2019-06-18 22:59:07 +02:00
committed by vanhofen
parent c9576dd4f4
commit 7170c0f21f
2 changed files with 27 additions and 3 deletions

View File

@@ -402,12 +402,35 @@ int mkdirhier(const char *pathname, mode_t mode)
}
# endif
/* This function is a replacement which makes sure that a \0 is always added,
cuz standard strncpy does not terminate the string if the source is exactly
as long or longer as the specified size. This can raise security issues.
num should be the real size of char array (do not subtract -1)
*/
void safe_strncpy(char *dest, const char *src, size_t num)
{
if(!src)
{
dest[0] = '\0';
return;
}
uint32_t l, size = strlen(src);
if(size > num - 1)
l = num - 1;
else
l = size;
memcpy(dest, src, l);
dest[l] = '\0';
}
int safe_mkdir(const char * path)
{
struct statfs s;
size_t l = strlen(path);
char d[l + 3];
strncpy(d, path, l);
char d[l];
safe_strncpy(d, path, l);
// skip trailing slashes
while (l > 0 && d[l - 1] == '/')
@@ -739,7 +762,7 @@ const char *cstr_replace(const char *search, const char *replace, const char *te
tmp = strncpy(tmp, replace, len_replace) + len_replace;
text += len_front + len_search; // move to next "end of search"
}
strncpy(tmp, text, strlen(text));
safe_strncpy(tmp, text, strlen(text));
return result;
}

View File

@@ -46,6 +46,7 @@ int my_system(int argc, const char *arg, ...); /* argc is number of arguments in
FILE* my_popen( pid_t& pid, const char *cmdstring, const char *type);
int run_pty(pid_t &pid, const char *cmdstring);
void safe_strncpy(char *dest, const char *src, size_t num);
int safe_mkdir(const char * path);
inline int safe_mkdir(std::string path) { return safe_mkdir(path.c_str()); }
//int mkdirhier(const char *pathname, mode_t mode = 0755);