summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2019-01-20 20:38:25 +0000
committerEdward Thomson <ethomson@edwardthomson.com>2019-01-25 22:31:01 +0000
commit3aa6d96a230d15620df0c6ea2ecaae54f5b49941 (patch)
tree1c99882454979a8778f548db62a225c3f32be625
parent759502ed30574d177b00997e106be22875ad9bd5 (diff)
downloadlibgit2-3aa6d96a230d15620df0c6ea2ecaae54f5b49941.tar.gz
tree: cast filename length in git_tree__parse_raw
Quiet down a warning from MSVC about how we're potentially losing data. Ensure that we're within a uint16_t before we do.
-rw-r--r--src/tree.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/tree.c b/src/tree.c
index d3b11f8c7..466180451 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -403,7 +403,7 @@ int git_tree__parse_raw(void *_tree, const char *data, size_t size)
if ((nul = memchr(buffer, 0, buffer_end - buffer)) == NULL)
return tree_error("failed to parse tree: object is corrupted", NULL);
- if ((filename_len = nul - buffer) == 0)
+ if ((filename_len = nul - buffer) == 0 || filename_len > UINT16_MAX)
return tree_error("failed to parse tree: can't parse filename", NULL);
if ((buffer_end - (nul + 1)) < GIT_OID_RAWSZ)
@@ -415,7 +415,7 @@ int git_tree__parse_raw(void *_tree, const char *data, size_t size)
GIT_ERROR_CHECK_ALLOC(entry);
entry->attr = attr;
- entry->filename_len = filename_len;
+ entry->filename_len = (uint16_t)filename_len;
entry->filename = buffer;
entry->oid = (git_oid *) ((char *) buffer + filename_len + 1);
}