summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/index.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/index.c b/src/index.c
index dc5024ff7..75471e5f3 100644
--- a/src/index.c
+++ b/src/index.c
@@ -657,10 +657,14 @@ static int read_unmerged(git_index *index, const char *buffer, size_t size)
buffer += len;
for (i = 0; i < 3; i++) {
- if (git__strtol32((long int *) &lost->mode[i], buffer, &endptr, 8) < GIT_SUCCESS ||
- !endptr || endptr == buffer || *endptr)
+ long tmp;
+
+ if (git__strtol32(&tmp, buffer, &endptr, 8) < GIT_SUCCESS ||
+ !endptr || endptr == buffer || *endptr || tmp > UINT_MAX)
return GIT_ERROR;
+ lost->mode[i] = tmp;
+
len = (endptr + 1) - buffer;
if (size <= len)
return git__throw(GIT_ERROR, "Failed to read unmerged entries");