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");