diff options
| author | lhchavez <lhchavez@lhchavez.com> | 2020-12-21 06:48:48 -0800 |
|---|---|---|
| committer | lhchavez <lhchavez@lhchavez.com> | 2020-12-21 07:02:54 -0800 |
| commit | 212ae9a70eddf3a77783d5cdffd3418273bfedd7 (patch) | |
| tree | 49deb8f4d96eb4b9a81b4f2afb36f5e98abbdf50 /tests/clar | |
| parent | f4b473fa842a84147d8036a27bac5c026c44dad4 (diff) | |
| download | libgit2-212ae9a70eddf3a77783d5cdffd3418273bfedd7.tar.gz | |
Fix the `-DENABLE_WERROR=ON` build for gcc 10.2
This change makes it possible to build with newer versions of gcc
without warnings. There were two warnings issued:
* gcc 8 added
[`-Wstringop-truncation`](https://developers.redhat.com/blog/2018/05/24/detecting-string-truncation-with-gcc-8/),
which warns if a call to `strncpy(3)` is prone to accidentally
truncating the destination string, since `strncpy(3)` does NOT add a
terminating `NULL` if the destination buffer is not large enough to
hold the input.
This change uses the pattern suggested in
https://us-cert.cisa.gov/bsi/articles/knowledge/coding-practices/strncpy-and-strncat
to fix the locations flagged by gcc.
* There was a potentially uninitialized access of `dest` in `fs_copy`.
Diffstat (limited to 'tests/clar')
| -rw-r--r-- | tests/clar/fs.h | 2 | ||||
| -rw-r--r-- | tests/clar/sandbox.h | 11 |
2 files changed, 8 insertions, 5 deletions
diff --git a/tests/clar/fs.h b/tests/clar/fs.h index 31a536427..d88f249c7 100644 --- a/tests/clar/fs.h +++ b/tests/clar/fs.h @@ -396,7 +396,7 @@ static void fs_copy(const char *source, const char *_dest) { char *dbuf = NULL; - const char *dest; + const char *dest = NULL; struct stat source_st, dest_st; cl_must_pass_(lstat(source, &source_st), "Failed to stat copy source"); diff --git a/tests/clar/sandbox.h b/tests/clar/sandbox.h index 2114819e4..0ba147962 100644 --- a/tests/clar/sandbox.h +++ b/tests/clar/sandbox.h @@ -2,7 +2,7 @@ #include <sys/syslimits.h> #endif -static char _clar_path[4096]; +static char _clar_path[4096 + 1]; static int is_valid_tmp_path(const char *path) @@ -39,7 +39,8 @@ find_tmp_path(char *buffer, size_t length) if (length >= PATH_MAX && realpath(env, buffer) != NULL) return 0; #endif - strncpy(buffer, env, length); + strncpy(buffer, env, length - 1); + buffer[length - 1] = '\0'; return 0; } } @@ -50,7 +51,8 @@ find_tmp_path(char *buffer, size_t length) if (length >= PATH_MAX && realpath("/tmp", buffer) != NULL) return 0; #endif - strncpy(buffer, "/tmp", length); + strncpy(buffer, "/tmp", length - 1); + buffer[length - 1] = '\0'; return 0; } @@ -65,7 +67,8 @@ find_tmp_path(char *buffer, size_t length) /* This system doesn't like us, try to use the current directory */ if (is_valid_tmp_path(".")) { - strncpy(buffer, ".", length); + strncpy(buffer, ".", length - 1); + buffer[length - 1] = '\0'; return 0; } |
