diff options
| author | Edward Thomson <ethomson@edwardthomson.com> | 2019-06-23 18:09:00 +0100 |
|---|---|---|
| committer | Edward Thomson <ethomson@edwardthomson.com> | 2019-11-22 15:21:13 +1100 |
| commit | 4dffa295c09b00fc781f7fb41596c61a7fb9649f (patch) | |
| tree | 66c804c273f510529c18f5b981ae13ddf89a067b /src | |
| parent | 6c13cf6dacf5f5f2f5ba4f28b3632f3f9df29b7c (diff) | |
| download | libgit2-4dffa295c09b00fc781f7fb41596c61a7fb9649f.tar.gz | |
blame: use a size_t for the buffer
Diffstat (limited to 'src')
| -rw-r--r-- | src/blame.c | 11 | ||||
| -rw-r--r-- | src/blame.h | 2 |
2 files changed, 10 insertions, 3 deletions
diff --git a/src/blame.c b/src/blame.c index 56b5b075a..404f1f643 100644 --- a/src/blame.c +++ b/src/blame.c @@ -268,7 +268,7 @@ static git_blame_hunk *split_hunk_in_vector( static int index_blob_lines(git_blame *blame) { const char *buf = blame->final_buf; - git_off_t len = blame->final_buf_size; + size_t len = blame->final_buf_size; int num = 0, incomplete = 0, bol = 1; size_t *i; @@ -335,8 +335,15 @@ static int blame_internal(git_blame *blame) if ((error = load_blob(blame)) < 0 || (error = git_blame__get_origin(&o, blame, blame->final, blame->path)) < 0) goto cleanup; + + if (git_blob_rawsize(blame->final_blob) > SIZE_MAX) { + git_error_set(GIT_ERROR_NOMEMORY, "blob is too large to blame"); + error = -1; + goto cleanup; + } + blame->final_buf = git_blob_rawcontent(blame->final_blob); - blame->final_buf_size = git_blob_rawsize(blame->final_blob); + blame->final_buf_size = (size_t)git_blob_rawsize(blame->final_blob); ent = git__calloc(1, sizeof(git_blame__entry)); GIT_ERROR_CHECK_ALLOC(ent); diff --git a/src/blame.h b/src/blame.h index b31d2dc20..4141e2bb5 100644 --- a/src/blame.h +++ b/src/blame.h @@ -84,7 +84,7 @@ struct git_blame { git_blame__entry *ent; int num_lines; const char *final_buf; - git_off_t final_buf_size; + size_t final_buf_size; }; git_blame *git_blame__alloc( |
