diff options
author | Joseph Hunkeler <jhunkeler@users.noreply.github.com> | 2021-05-06 00:34:05 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-06 00:34:05 -0400 |
commit | c429ae2f0790c3486e7e420f4f2883c6a530ccf0 (patch) | |
tree | 200ab1a431513fdae9bd2c8b6652c70947287918 | |
parent | 562258a7663a8d6447c46059743b173e19196e76 (diff) | |
download | cleanpath-c429ae2f0790c3486e7e420f4f2883c6a530ccf0.tar.gz |
No sep ending (#2)
* Be extra sure not to inject a separator at the end of the output string
-rw-r--r-- | README.md | 3 | ||||
-rw-r--r-- | lib/cleanpath.c | 2 | ||||
-rw-r--r-- | tests/test_no_sep_ending.c | 19 |
3 files changed, 23 insertions, 1 deletions
@@ -1,7 +1,10 @@ # cleanpath +[](https://github.com/jhunkeler/cleanpath/actions/workflows/cmake.yml) + `cleanpath` is a utility that filters unwanted elements from an environment variable. + # Installation ```shell diff --git a/lib/cleanpath.c b/lib/cleanpath.c index f94c66d..c7f8bc9 100644 --- a/lib/cleanpath.c +++ b/lib/cleanpath.c @@ -102,7 +102,7 @@ char *cleanpath_read(struct CleanPath *path) { strcat(result, path->part[i]); // Do not append path separator on final element - if (path->part[i + 1] != NULL) { + if (path->part[i + 1] != NULL && *path->part[i + 1] != '\0') { strcat(result, path->sep); } } diff --git a/tests/test_no_sep_ending.c b/tests/test_no_sep_ending.c new file mode 100644 index 0000000..6b89c2b --- /dev/null +++ b/tests/test_no_sep_ending.c @@ -0,0 +1,19 @@ +#include "cleanpath.h" +#include "framework.h" + +int main() { + const char *input = "/usr/bin:/usr/sbin:/sbin:/bin:"; + struct CleanPath *path; + char *result; + size_t len; + + result = NULL; + path = cleanpath_init(input, TEST_SEP); + cleanpath_filter(path, CLEANPATH_FILTER_REGEX, "/bin"); + result = cleanpath_read(path); + cleanpath_free(path); + + len = strlen(result); + puts(result); + myassert(len && *(result + (len - 1)) != TEST_SEP[0], "Result ends with a separator:\n'%s'", result); +}
\ No newline at end of file |