diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2017-04-07 09:03:56 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-07 09:03:56 +0100 |
commit | e572b63121dccf71054beeb62d4b18e618379049 (patch) | |
tree | 6887b825df8091721bece62ef083652b91e24756 | |
parent | 44998cdb9a715fd470a78b0484a505955adc5546 (diff) | |
parent | 9daba9f4b690d7450f0bbb4e999914b03bbe57a7 (diff) | |
download | libgit2-e572b63121dccf71054beeb62d4b18e618379049.tar.gz |
Merge pull request #4183 from pks-t/pks/coverity
Coverity
-rw-r--r-- | src/blame_git.c | 7 | ||||
-rw-r--r-- | src/config_file.c | 23 | ||||
-rw-r--r-- | src/fileops.c | 4 | ||||
-rw-r--r-- | src/path.c | 7 |
4 files changed, 23 insertions, 18 deletions
diff --git a/src/blame_git.c b/src/blame_git.c index 6d2f1531f..13f5cb47c 100644 --- a/src/blame_git.c +++ b/src/blame_git.c @@ -517,11 +517,12 @@ static int pass_blame(git_blame *blame, git_blame__origin *origin, uint32_t opt) if (!num_parents) { git_oid_cpy(&blame->options.oldest_commit, git_commit_id(commit)); goto finish; - } - else if (num_parents < (int)ARRAY_SIZE(sg_buf)) + } else if (num_parents < (int)ARRAY_SIZE(sg_buf)) memset(sg_buf, 0, sizeof(sg_buf)); - else + else { sg_origin = git__calloc(num_parents, sizeof(*sg_origin)); + GITERR_CHECK_ALLOC(sg_origin); + } for (i=0; i<num_parents; i++) { git_commit *p; diff --git a/src/config_file.c b/src/config_file.c index 50c5a3d82..7df43c85f 100644 --- a/src/config_file.c +++ b/src/config_file.c @@ -1027,7 +1027,7 @@ static int parse_section_header_ext(struct reader *reader, const char *line, con first_quote = strchr(line, '"'); if (first_quote == NULL) { set_parse_error(reader, 0, "Missing quotation marks in section header"); - return -1; + goto end_error; } last_quote = strrchr(line, '"'); @@ -1035,7 +1035,7 @@ static int parse_section_header_ext(struct reader *reader, const char *line, con if (quoted_len == 0) { set_parse_error(reader, 0, "Missing closing quotation mark in section header"); - return -1; + goto end_error; } GITERR_CHECK_ALLOC_ADD(&alloc_len, base_name_len, quoted_len); @@ -1043,7 +1043,7 @@ static int parse_section_header_ext(struct reader *reader, const char *line, con if (git_buf_grow(&buf, alloc_len) < 0 || git_buf_printf(&buf, "%s.", base_name) < 0) - goto end_parse; + goto end_error; rpos = 0; @@ -1059,8 +1059,7 @@ static int parse_section_header_ext(struct reader *reader, const char *line, con switch (c) { case 0: set_parse_error(reader, 0, "Unexpected end-of-line in section header"); - git_buf_free(&buf); - return -1; + goto end_error; case '"': goto end_parse; @@ -1070,8 +1069,7 @@ static int parse_section_header_ext(struct reader *reader, const char *line, con if (c == 0) { set_parse_error(reader, rpos, "Unexpected end-of-line in section header"); - git_buf_free(&buf); - return -1; + goto end_error; } default: @@ -1083,10 +1081,8 @@ static int parse_section_header_ext(struct reader *reader, const char *line, con } while (line + rpos < last_quote); end_parse: - if (git_buf_oom(&buf)) { - git_buf_free(&buf); - return -1; - } + if (git_buf_oom(&buf)) + goto end_error; if (line[rpos] != '"' || line[rpos + 1] != ']') { set_parse_error(reader, rpos, "Unexpected text after closing quotes"); @@ -1096,6 +1092,11 @@ end_parse: *section_name = git_buf_detach(&buf); return 0; + +end_error: + git_buf_free(&buf); + + return -1; } static int parse_section_header(struct reader *reader, char **section_out) diff --git a/src/fileops.c b/src/fileops.c index ad2a988a9..f9552a5f8 100644 --- a/src/fileops.c +++ b/src/fileops.c @@ -304,7 +304,9 @@ int git_futils_mmap_ro_file(git_map *out, const char *path) if (fd < 0) return fd; - len = git_futils_filesize(fd); + if ((len = git_futils_filesize(fd)) < 0) + return -1; + if (!git__is_sizet(len)) { giterr_set(GITERR_OS, "file `%s` too large to mmap", path); return -1; diff --git a/src/path.c b/src/path.c index c3d3eb1ce..b7205a646 100644 --- a/src/path.c +++ b/src/path.c @@ -700,7 +700,8 @@ static bool _check_dir_contents( return false; /* save excursion */ - git_buf_joinpath(dir, dir->ptr, sub); + if (git_buf_joinpath(dir, dir->ptr, sub) < 0) + return false; result = predicate(dir->ptr); @@ -825,8 +826,8 @@ int git_path_resolve_relative(git_buf *path, size_t ceiling) int git_path_apply_relative(git_buf *target, const char *relpath) { - git_buf_joinpath(target, git_buf_cstr(target), relpath); - return git_path_resolve_relative(target, 0); + return git_buf_joinpath(target, git_buf_cstr(target), relpath) || + git_path_resolve_relative(target, 0); } int git_path_cmp( |