diff options
author | Carlos MartÃn Nieto <cmn@dwim.me> | 2018-05-22 15:21:08 +0200 |
---|---|---|
committer | Patrick Steinhardt <ps@pks.im> | 2018-06-01 13:44:32 +0200 |
commit | 644c973fd54c375ee6a4a32aaffca1b02e5042cb (patch) | |
tree | 9ee267b467d97d46d11328e271ed547580e33996 | |
parent | 2143a0de1088903d83f9690eb76cac5f63bd840e (diff) | |
download | libgit2-644c973fd54c375ee6a4a32aaffca1b02e5042cb.tar.gz |
path: accept the name length as a parameter
We may take in names from the middle of a string so we want the caller to let us
know how long the path component is that we should be checking.
-rw-r--r-- | src/path.c | 52 | ||||
-rw-r--r-- | src/path.h | 27 | ||||
-rw-r--r-- | tests/path/dotgit.c | 8 |
3 files changed, 47 insertions, 40 deletions
diff --git a/src/path.c b/src/path.c index 560cf86f3..816a35953 100644 --- a/src/path.c +++ b/src/path.c @@ -1634,10 +1634,8 @@ GIT_INLINE(bool) only_spaces_and_dots(const char *path) return true; } -GIT_INLINE(bool) verify_dotgit_ntfs_generic(const char *name, const char *dotgit_name, const char *shortname_pfix) +GIT_INLINE(bool) verify_dotgit_ntfs_generic(const char *name, size_t len, const char *dotgit_name, size_t dotgit_len, const char *shortname_pfix) { - size_t len = strlen(name); - size_t dotgit_len = strlen(dotgit_name); int i, saw_tilde; if (name[0] == '.' && len >= dotgit_len && @@ -1841,64 +1839,64 @@ int git_path_normalize_slashes(git_buf *out, const char *path) return 0; } -static int verify_dotgit_generic(const char *name, const char *dotgit_name, const char *shortname_pfix) +static int verify_dotgit_generic(const char *name, size_t len, const char *dotgit_name, size_t dotgit_len, const char *shortname_pfix) { - if (!verify_dotgit_ntfs_generic(name, dotgit_name, shortname_pfix)) + if (!verify_dotgit_ntfs_generic(name, len, dotgit_name, dotgit_len, shortname_pfix)) return false; - return verify_dotgit_hfs_generic(name, strlen(name), dotgit_name, strlen(dotgit_name)); + return verify_dotgit_hfs_generic(name, len, dotgit_name, dotgit_len); } -int git_path_is_ntfs_dotgit_modules(const char *name) +int git_path_is_ntfs_dotgit_modules(const char *name, size_t len) { - return !verify_dotgit_ntfs_generic(name, "gitmodules", "gi7eba"); + return !verify_dotgit_ntfs_generic(name, len, "gitmodules", CONST_STRLEN("gitmodules"), "gi7eba"); } -int git_path_is_hfs_dotgit_modules(const char *name) +int git_path_is_hfs_dotgit_modules(const char *name, size_t len) { - return !verify_dotgit_hfs_generic(name, strlen(name), "gitmodules", CONST_STRLEN("gitmodules")); + return !verify_dotgit_hfs_generic(name, len, "gitmodules", CONST_STRLEN("gitmodules")); } -int git_path_is_dotgit_modules(const char *name) +int git_path_is_dotgit_modules(const char *name, size_t len) { - if (git_path_is_hfs_dotgit_modules(name)) + if (git_path_is_hfs_dotgit_modules(name, len)) return 1; - return git_path_is_ntfs_dotgit_modules(name); + return git_path_is_ntfs_dotgit_modules(name, len); } -int git_path_is_ntfs_dotgit_ignore(const char *name) +int git_path_is_ntfs_dotgit_ignore(const char *name, size_t len) { - return !verify_dotgit_ntfs_generic(name, "gitignore", "gi250a"); + return !verify_dotgit_ntfs_generic(name, len, "gitignore", CONST_STRLEN("gitignore"), "gi250a"); } -int git_path_is_hfs_dotgit_ignore(const char *name) +int git_path_is_hfs_dotgit_ignore(const char *name, size_t len) { - return !verify_dotgit_hfs_generic(name, strlen(name), "gitignore", CONST_STRLEN("gitignore")); + return !verify_dotgit_hfs_generic(name, len, "gitignore", CONST_STRLEN("gitignore")); } -int git_path_is_dotgit_ignore(const char *name) +int git_path_is_dotgit_ignore(const char *name, size_t len) { - if (git_path_is_hfs_dotgit_ignore(name)) + if (git_path_is_hfs_dotgit_ignore(name, len)) return 1; - return git_path_is_ntfs_dotgit_ignore(name); + return git_path_is_ntfs_dotgit_ignore(name, len); } -int git_path_is_hfs_dotgit_attributes(const char *name) +int git_path_is_hfs_dotgit_attributes(const char *name, size_t len) { - return !verify_dotgit_hfs_generic(name, strlen(name), "gitattributes", CONST_STRLEN("gitattributes")); + return !verify_dotgit_hfs_generic(name, len, "gitattributes", CONST_STRLEN("gitattributes")); } -int git_path_is_ntfs_dotgit_attributes(const char *name) +int git_path_is_ntfs_dotgit_attributes(const char *name, size_t len) { - return !verify_dotgit_ntfs_generic(name, "gitattributes", "gi7d29"); + return !verify_dotgit_ntfs_generic(name, len, "gitattributes", CONST_STRLEN("gitattributes"), "gi7d29"); } -int git_path_is_dotgit_attributes(const char *name) +int git_path_is_dotgit_attributes(const char *name, size_t len) { - if (git_path_is_hfs_dotgit_attributes(name)) + if (git_path_is_hfs_dotgit_attributes(name, len)) return 1; - return git_path_is_ntfs_dotgit_attributes(name); + return git_path_is_ntfs_dotgit_attributes(name, len); } diff --git a/src/path.h b/src/path.h index 553608aa2..86093884c 100644 --- a/src/path.h +++ b/src/path.h @@ -634,63 +634,72 @@ int git_path_normalize_slashes(git_buf *out, const char *path); * Check whether a path component corresponds to a .gitmodules file * * @param name the path component to check + * @param len the length of `name` */ -extern int git_path_is_dotgit_modules(const char *name); +extern int git_path_is_dotgit_modules(const char *name, size_t len); /** * Check whether a path component corresponds to a .gitmodules file in NTFS * * @param name the path component to check + * @param len the length of `name` */ -extern int git_path_is_ntfs_dotgit_modules(const char *name); +extern int git_path_is_ntfs_dotgit_modules(const char *name, size_t len); /** * Check whether a path component corresponds to a .gitmodules file in HFS+ * * @param name the path component to check + * @param len the length of `name` */ -extern int git_path_is_hfs_dotgit_modules(const char *name); +extern int git_path_is_hfs_dotgit_modules(const char *name, size_t len); /** * Check whether a path component corresponds to a .gitignore file * * @param name the path component to check + * @param len the length of `name` */ -extern int git_path_is_dotgit_ignore(const char *name); +extern int git_path_is_dotgit_ignore(const char *name, size_t len); /** * Check whether a path component corresponds to a .gitignore file in NTFS * * @param name the path component to check + * @param len the length of `name` */ -extern int git_path_is_ntfs_dotgit_ignore(const char *name); +extern int git_path_is_ntfs_dotgit_ignore(const char *name, size_t len); /** * Check whether a path component corresponds to a .gitignore file in HFS+ * * @param name the path component to check + * @param len the length of `name` */ -extern int git_path_is_hfs_dotgit_ignore(const char *name); +extern int git_path_is_hfs_dotgit_ignore(const char *name, size_t len); /** * Check whether a path component corresponds to a .gitignore file * * @param name the path component to check + * @param len the length of `name` */ -extern int git_path_is_dotgit_attributes(const char *name); +extern int git_path_is_dotgit_attributes(const char *name, size_t len); /** * Check whether a path component corresponds to a .gitattributes file in NTFS * * @param name the path component to check + * @param len the length of `name` */ -extern int git_path_is_ntfs_dotgit_attributes(const char *name); +extern int git_path_is_ntfs_dotgit_attributes(const char *name, size_t len); /** * Check whether a path component corresponds to a .gitattributes file in HFS+ * * @param name the path component to check + * @param len the length of `name` */ -extern int git_path_is_hfs_dotgit_attributes(const char *name); +extern int git_path_is_hfs_dotgit_attributes(const char *name, size_t len); #endif diff --git a/tests/path/dotgit.c b/tests/path/dotgit.c index 7a011d4f6..038e849c2 100644 --- a/tests/path/dotgit.c +++ b/tests/path/dotgit.c @@ -90,18 +90,18 @@ static char *gitmodules_not_altnames[] = { void test_path_dotgit__dotgit_modules(void) { size_t i; - cl_assert_equal_i(1, git_path_is_dotgit_modules(".gitmodules")); - cl_assert_equal_i(1, git_path_is_dotgit_modules(".git\xe2\x80\x8cmodules")); + cl_assert_equal_i(1, git_path_is_dotgit_modules(".gitmodules", strlen(".gitmodules"))); + cl_assert_equal_i(1, git_path_is_dotgit_modules(".git\xe2\x80\x8cmodules", strlen(".git\xe2\x80\x8cmodules"))); for (i = 0; i < ARRAY_SIZE(gitmodules_altnames); i++) { const char *name = gitmodules_altnames[i]; - if (!git_path_is_dotgit_modules(name)) + if (!git_path_is_dotgit_modules(name, strlen(name))) cl_fail(name); } for (i = 0; i < ARRAY_SIZE(gitmodules_not_altnames); i++) { const char *name = gitmodules_not_altnames[i]; - if (git_path_is_dotgit_modules(name)) + if (git_path_is_dotgit_modules(name, strlen(name))) cl_fail(name); } |