Branch Coverage

deps/libgit2/src/patch_parse.c
Criterion Covered Total %
branch 156 376 41.4


line true false branch
54 32 0 for (len = quoted; len < ctx->parse_ctx.line_len; len++) {
55 32 0 if (!quoted && git__isspace(ctx->parse_ctx.line[len]))
28 4 if (!quoted && git__isspace(ctx->parse_ctx.line[len]))
57 0 28 else if (quoted && !inquote && ctx->parse_ctx.line[len] == '"') {
0 0 else if (quoted && !inquote && ctx->parse_ctx.line[len] == '"') {
0 0 else if (quoted && !inquote && ctx->parse_ctx.line[len] == '"') {
62 28 0 inquote = (!inquote && ctx->parse_ctx.line[len] == '\\');
0 28 inquote = (!inquote && ctx->parse_ctx.line[len] == '\\');
72 0 8 if ((error = git_buf_put(path, ctx->parse_ctx.line, path_len)) < 0)
79 8 0 if (path->size > 0 && path->ptr[0] == '"' &&
0 8 if (path->size > 0 && path->ptr[0] == '"' &&
0 0 if (path->size > 0 && path->ptr[0] == '"' &&
85 0 8 if (!path->size)
97 0 4 if ((error = parse_header_path_buf(&path, ctx, header_path_len(ctx))) < 0)
112 0 2 if (patch->old_path) {
118 0 2 if ((error = parse_header_path_buf(&old_path, ctx, ctx->parse_ctx.line_len - 1)) < 0)
134 0 2 if (patch->new_path) {
140 0 2 if ((error = parse_header_path_buf(&new_path, ctx, ctx->parse_ctx.line_len - 1)) < 0)
153 0 2 if ((git_parse_advance_digit(&m, &ctx->parse_ctx, 8)) < 0)
156 0 2 if (m > UINT16_MAX)
171 32 0 for (len = 0; len < ctx->parse_ctx.line_len && len < GIT_OID_HEXSZ; len++) {
32 0 for (len = 0; len < ctx->parse_ctx.line_len && len < GIT_OID_HEXSZ; len++) {
172 4 28 if (!git__isxdigit(ctx->parse_ctx.line[len]))
176 4 0 if (len < GIT_OID_MINPREFIXLEN || len > GIT_OID_HEXSZ ||
193 2 0 if (parse_header_oid(&patch->base.delta->old_file.id,
194 2 0 &patch->base.delta->old_file.id_abbrev, ctx) < 0 ||
195 0 2 git_parse_advance_expected_str(&ctx->parse_ctx, "..") < 0 ||
200 2 0 if (git_parse_peek(&c, &ctx->parse_ctx, 0) == 0 && c == ' ') {
1 1 if (git_parse_peek(&c, &ctx->parse_ctx, 0) == 0 && c == ' ') {
205 0 1 if (parse_header_mode(&mode, ctx) < 0)
208 1 0 if (!patch->base.delta->new_file.mode)
211 1 0 if (!patch->base.delta->old_file.mode)
262 0 0 if (parse_header_path_buf(&path, ctx, header_path_len(ctx)) < 0)
304 0 0 if (git_parse_advance_digit(&val, &ctx->parse_ctx, 10) < 0)
307 0 0 if (git_parse_advance_expected_str(&ctx->parse_ctx, "%") < 0)
310 0 0 if (val < 0 || val > 100)
0 0 if (val < 0 || val > 100)
320 0 0 if (parse_header_percent(&patch->base.delta->similarity, ctx) < 0)
332 0 0 if (parse_header_percent(&dissimilarity, ctx) < 0)
343 0 2 if (parse_header_path(&patch->header_old_path, ctx) < 0)
440 11 0 for (; ctx->parse_ctx.remain_len > 0; git_parse_advance_line(&ctx->parse_ctx)) {
443 11 0 if (ctx->parse_ctx.line_len == 0 || ctx->parse_ctx.line[ctx->parse_ctx.line_len - 1] != '\n')
11 0 if (ctx->parse_ctx.line_len == 0 || ctx->parse_ctx.line[ctx->parse_ctx.line_len - 1] != '\n')
446 108 0 for (i = 0; i < ARRAY_SIZE(transitions); i++) {
457 2 9 if (transition->fn == NULL)
462 0 9 if ((error = transition->fn(patch, ctx)) < 0)
467 9 0 if (git_parse_advance_expected_str(&ctx->parse_ctx, "\n") < 0 ||
0 9 if (git_parse_advance_expected_str(&ctx->parse_ctx, "\n") < 0 ||
477 0 9 if (!found) {
484 0 0 if (state != STATE_END) {
497 6 0 if (git_parse_advance_digit(&num, &ctx->parse_ctx, 10) < 0 || !git__is_int(num))
0 6 if (git_parse_advance_digit(&num, &ctx->parse_ctx, 10) < 0 || !git__is_int(num))
518 2 0 if (git_parse_peek(&c, &ctx->parse_ctx, 0) == 0 && c == ',') {
1 1 if (git_parse_peek(&c, &ctx->parse_ctx, 0) == 0 && c == ',') {
528 2 0 if (git_parse_peek(&c, &ctx->parse_ctx, 0) == 0 && c == ',') {
1 1 if (git_parse_peek(&c, &ctx->parse_ctx, 0) == 0 && c == ',') {
534 0 2 if (git_parse_advance_expected_str(&ctx->parse_ctx, " @@") < 0)
539 1 1 if (!hunk->hunk.old_lines && !hunk->hunk.new_lines)
0 1 if (!hunk->hunk.old_lines && !hunk->hunk.new_lines)
543 0 2 if (hunk->hunk.header_len > (GIT_DIFF_HUNK_HEADER_SIZE - 1))
559 0 0 if (origin == GIT_DIFF_LINE_ADDITION)
561 0 0 if (origin == GIT_DIFF_LINE_DELETION)
578 5 0 for (;
579 4 1 ctx->parse_ctx.remain_len > 1 &&
588 3 0 git__sub_int_overflow(&old_lineno, old_lineno, oldlines) ||
589 0 3 git__add_int_overflow(&new_lineno, hunk->hunk.new_start, hunk->hunk.new_lines) ||
596 3 0 if (ctx->parse_ctx.line_len == 0 || ctx->parse_ctx.line[ctx->parse_ctx.line_len - 1] != '\n') {
0 3 if (ctx->parse_ctx.line_len == 0 || ctx->parse_ctx.line[ctx->parse_ctx.line_len - 1] != '\n') {
633 0 0 if (!oldlines) {
647 2 1 line = git_array_alloc(patch->base.lines);
1 0 line = git_array_alloc(patch->base.lines);
648 0 3 GIT_ERROR_CHECK_ALLOC(line);
654 0 3 GIT_ERROR_CHECK_ALLOC(line->content);
666 2 0 if (oldlines || newlines) {
0 2 if (oldlines || newlines) {
679 0 2 if (git_parse_ctx_contains_s(&ctx->parse_ctx, "\\ ") &&
0 0 if (git_parse_ctx_contains_s(&ctx->parse_ctx, "\\ ") &&
682 0 0 line = git_array_get(patch->base.lines, git_array_size(patch->base.lines) - 1);
684 0 0 if (line->content_len < 1) {
689 0 0 line = git_array_alloc(patch->base.lines);
0 0 line = git_array_alloc(patch->base.lines);
690 0 0 GIT_ERROR_CHECK_ALLOC(line);
696 0 0 GIT_ERROR_CHECK_ALLOC(line->content);
718 15 0 for (; ctx->parse_ctx.remain_len > 0; git_parse_advance_line(&ctx->parse_ctx)) {
720 4 11 if (ctx->parse_ctx.line_len < 6)
725 0 11 if (git_parse_ctx_contains_s(&ctx->parse_ctx, "@@ -")) {
732 0 0 if (parse_hunk_header(&hunk, ctx) < 0) {
743 1 10 if (ctx->parse_ctx.remain_len < ctx->parse_ctx.line_len + 6)
747 2 8 if (git_parse_ctx_contains_s(&ctx->parse_ctx, "diff --git ")) {
772 0 0 if (git_parse_ctx_contains_s(&ctx->parse_ctx, "literal ")) {
775 0 0 } else if (git_parse_ctx_contains_s(&ctx->parse_ctx, "delta ")) {
785 0 0 git_parse_advance_nl(&ctx->parse_ctx) < 0 || len < 0) {
790 0 0 while (ctx->parse_ctx.line_len) {
796 0 0 if (c == '\n')
798 0 0 else if (c >= 'A' && c <= 'Z')
0 0 else if (c >= 'A' && c <= 'Z')
800 0 0 else if (c >= 'a' && c <= 'z')
0 0 else if (c >= 'a' && c <= 'z')
803 0 0 if (!decoded_len) {
812 0 0 if (!encoded_len || !ctx->parse_ctx.line_len || encoded_len > ctx->parse_ctx.line_len - 1) {
0 0 if (!encoded_len || !ctx->parse_ctx.line_len || encoded_len > ctx->parse_ctx.line_len - 1) {
0 0 if (!encoded_len || !ctx->parse_ctx.line_len || encoded_len > ctx->parse_ctx.line_len - 1) {
817 0 0 if ((error = git_buf_decode_base85(
821 0 0 if (decoded.size - decoded_orig != decoded_len) {
828 0 0 if (git_parse_advance_nl(&ctx->parse_ctx) < 0) {
856 0 0 if ((error = parse_patch_binary_side(
860 0 0 if (git_parse_advance_nl(&ctx->parse_ctx) < 0)
865 0 0 if ((error = parse_patch_binary_side(
869 0 0 if (git_parse_advance_nl(&ctx->parse_ctx) < 0)
882 0 0 const char *old = patch->old_path ? patch->old_path : patch->header_old_path;
883 0 0 const char *new = patch->new_path ? patch->new_path : patch->header_new_path;
885 0 0 if (!old || !new)
0 0 if (!old || !new)
888 0 0 if (patch->base.delta->status == GIT_DELTA_ADDED)
890 0 0 else if (patch->base.delta->status == GIT_DELTA_DELETED)
894 0 0 git_parse_advance_expected_str(&ctx->parse_ctx, old) < 0 ||
895 0 0 git_parse_advance_expected_str(&ctx->parse_ctx, " and ") < 0 ||
896 0 0 git_parse_advance_expected_str(&ctx->parse_ctx, new) < 0 ||
897 0 0 git_parse_advance_expected_str(&ctx->parse_ctx, " differ") < 0 ||
913 2 2 while (git_parse_ctx_contains_s(&ctx->parse_ctx, "@@ -")) {
914 2 0 hunk = git_array_alloc(patch->base.hunks);
0 0 hunk = git_array_alloc(patch->base.hunks);
915 0 2 GIT_ERROR_CHECK_ALLOC(hunk);
922 2 0 if ((error = parse_hunk_header(hunk, ctx)) < 0 ||
2 0 if ((error = parse_hunk_header(hunk, ctx)) < 0 ||
936 0 2 if (git_parse_ctx_contains_s(&ctx->parse_ctx, "GIT binary patch"))
938 0 2 else if (git_parse_ctx_contains_s(&ctx->parse_ctx, "Binary files "))
950 4 0 if (!one || !two)
0 4 if (!one || !two)
953 1 3 if (two_null && strcmp(two, "/dev/null") != 0)
0 1 if (two_null && strcmp(two, "/dev/null") != 0)
956 3 1 else if (!two_null && strcmp(one, two) != 0)
0 3 else if (!two_null && strcmp(one, two) != 0)
975 0 4 if (prefix_len == 0)
979 0 4 while (*path == '/')
982 12 0 while (*path && remain_len) {
8 4 while (*path && remain_len) {
983 4 4 if (*path == '/')
989 4 0 if (remain_len || !*path)
0 4 if (remain_len || !*path)
998 0 4 return (*out == NULL) ? -1 : 0;
1008 2 0 if (patch->old_path && !patch->new_path)
0 2 if (patch->old_path && !patch->new_path)
1011 0 2 if (!patch->old_path && patch->new_path)
0 0 if (!patch->old_path && patch->new_path)
1019 1 1 prefixed_old = (!added && patch->old_path) ? patch->old_path : patch->header_old_path;
1 0 prefixed_old = (!added && patch->old_path) ? patch->old_path : patch->header_old_path;
1020 2 0 prefixed_new = (!deleted && patch->new_path) ? patch->new_path : patch->header_new_path;
2 0 prefixed_new = (!deleted && patch->new_path) ? patch->new_path : patch->header_new_path;
1022 2 0 if ((prefixed_old && check_prefix(&patch->old_prefix, &old_prefixlen, patch, prefixed_old) < 0) ||
2 0 if ((prefixed_old && check_prefix(&patch->old_prefix, &old_prefixlen, patch, prefixed_old) < 0) ||
2 0 if ((prefixed_old && check_prefix(&patch->old_prefix, &old_prefixlen, patch, prefixed_old) < 0) ||
1023 0 2 (prefixed_new && check_prefix(&patch->new_prefix, &new_prefixlen, patch, prefixed_new) < 0))
1027 0 2 if (patch->rename_old_path)
1029 2 0 else if (prefixed_old)
1034 0 2 if (patch->rename_new_path)
1036 2 0 else if (prefixed_new)
1041 0 2 if (!patch->base.delta->old_file.path &&
0 0 if (!patch->base.delta->old_file.path &&
1052 0 2 if (check_filenames(patch) < 0)
1055 2 0 if (delta->old_file.path &&
2 0 if (delta->old_file.path &&
1056 0 2 delta->status != GIT_DELTA_DELETED &&
1060 1 1 if (delta->status == GIT_DELTA_MODIFIED &&
1 0 if (delta->status == GIT_DELTA_MODIFIED &&
1061 1 0 !(delta->flags & GIT_DIFF_FLAG_BINARY) &&
1062 0 1 delta->new_file.mode == delta->old_file.mode &&
1066 1 1 if (delta->status == GIT_DELTA_ADDED) {
1071 0 2 if (delta->status == GIT_DELTA_DELETED) {
1087 0 1 if ((ctx = git__calloc(1, sizeof(git_patch_parse_ctx))) == NULL)
1090 0 1 if ((git_parse_ctx_init(&ctx->parse_ctx, content, content_len)) < 0) {
1095 0 1 if (opts)
1106 0 1 if (!ctx)
1115 1 3 GIT_REFCOUNT_DEC(ctx, patch_parse_ctx_free);
1 0 GIT_REFCOUNT_DEC(ctx, patch_parse_ctx_free);
1123 0 2 if ((p = git_vector_get(&diff->patches, idx)) == NULL)
1138 0 3 if (!patch)
1146 3 3 git_array_foreach(patch->base.lines, i, line)
3 0 git_array_foreach(patch->base.lines, i, line)
1170 3 0 assert(out && ctx);
0 3 assert(out && ctx);
1175 0 3 GIT_ERROR_CHECK_ALLOC(patch);
1183 0 3 GIT_ERROR_CHECK_ALLOC(patch->base.delta);
1190 2 1 if ((error = parse_patch_header(patch, ctx)) < 0 ||
2 0 if ((error = parse_patch_header(patch, ctx)) < 0 ||
1191 2 0 (error = parse_patch_body(patch, ctx)) < 0 ||
1206 1 2 if (error < 0)
1222 0 0 GIT_ERROR_CHECK_ALLOC(ctx);