summaryrefslogtreecommitdiff
path: root/src/odb.c
diff options
context:
space:
mode:
authorDavid Tolnay <dtolnay@gmail.com>2021-05-30 10:42:25 -0700
committerDavid Tolnay <dtolnay@gmail.com>2021-05-30 11:54:18 -0700
commitcf9196bdbc009e79f3806f7353c1ce6885dd677e (patch)
treee9b73dd449b7e08a936ec65c10b7b86fda46d549 /src/odb.c
parent1ee3c37f48479e92f57c1a5da8c8393f4a745d13 (diff)
downloadlibgit2-cf9196bdbc009e79f3806f7353c1ce6885dd677e.tar.gz
Tolerate readlink size less than st_size
Diffstat (limited to 'src/odb.c')
-rw-r--r--src/odb.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/odb.c b/src/odb.c
index 1b91434bf..7625ce6e3 100644
--- a/src/odb.c
+++ b/src/odb.c
@@ -297,14 +297,15 @@ int git_odb__hashlink(git_oid *out, const char *path)
GIT_ERROR_CHECK_ALLOC(link_data);
read_len = p_readlink(path, link_data, size);
- link_data[size] = '\0';
- if (read_len != size) {
+ if (read_len == -1) {
git_error_set(GIT_ERROR_OS, "failed to read symlink data for '%s'", path);
git__free(link_data);
return -1;
}
+ GIT_ASSERT(read_len <= size);
+ link_data[read_len] = '\0';
- result = git_odb_hash(out, link_data, size, GIT_OBJECT_BLOB);
+ result = git_odb_hash(out, link_data, read_len, GIT_OBJECT_BLOB);
git__free(link_data);
} else {
int fd = git_futils_open_ro(path);