summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2019-06-23 18:09:00 +0100
committerEdward Thomson <ethomson@edwardthomson.com>2019-11-22 15:21:13 +1100
commit4dffa295c09b00fc781f7fb41596c61a7fb9649f (patch)
tree66c804c273f510529c18f5b981ae13ddf89a067b /src
parent6c13cf6dacf5f5f2f5ba4f28b3632f3f9df29b7c (diff)
downloadlibgit2-4dffa295c09b00fc781f7fb41596c61a7fb9649f.tar.gz
blame: use a size_t for the buffer
Diffstat (limited to 'src')
-rw-r--r--src/blame.c11
-rw-r--r--src/blame.h2
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(