diff options
| author | David Tolnay <dtolnay@gmail.com> | 2021-05-30 10:42:25 -0700 |
|---|---|---|
| committer | David Tolnay <dtolnay@gmail.com> | 2021-05-30 11:54:18 -0700 |
| commit | cf9196bdbc009e79f3806f7353c1ce6885dd677e (patch) | |
| tree | e9b73dd449b7e08a936ec65c10b7b86fda46d549 /src/odb.c | |
| parent | 1ee3c37f48479e92f57c1a5da8c8393f4a745d13 (diff) | |
| download | libgit2-cf9196bdbc009e79f3806f7353c1ce6885dd677e.tar.gz | |
Tolerate readlink size less than st_size
Diffstat (limited to 'src/odb.c')
| -rw-r--r-- | src/odb.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -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); |
