From 3217c5d357a9003ae9f52d68a6cb0385306af5f0 Mon Sep 17 00:00:00 2001 From: Arthur Chan Date: Wed, 28 Sep 2022 18:02:27 +0100 Subject: [PATCH] Fix git structure and git diff testcase (#8622) Add in more test cases for git diff Fix git base work tree allowing more coverage for git diff and other commands. --- projects/git/fuzz-command.c | 91 +++++++++++++++++++++++++++++++++---- 1 file changed, 82 insertions(+), 9 deletions(-) diff --git a/projects/git/fuzz-command.c b/projects/git/fuzz-command.c index 3b74f6ed5..e31adb008 100644 --- a/projects/git/fuzz-command.c +++ b/projects/git/fuzz-command.c @@ -104,6 +104,15 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) return 0; } + /* + * Create branch + */ + argv[0] = "branch"; + argv[1] = "-f"; + argv[2] = "new_branch"; + argv[3] = NULL; + cmd_branch(3, (const char **)argv, (const char *)""); + /* * Alter content of TEMP_1 and TEMP_2 */ @@ -202,17 +211,74 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) break; case GIT_DIFF: - argv[0] = "diff"; - argv[1] = NULL; - cmd_diff(1, (const char **)argv, (const char *)""); + switch(i % 9) { + case 0: default: + argv[0] = "diff"; + argv[1] = NULL; + cmd_diff(1, (const char **)argv, (const char *)""); - argv[1] = "TEMP_1"; - argv[2] = NULL; - cmd_diff(2, (const char **)argv, (const char *)""); + break; - argv[2] = "TEMP_2"; - argv[3] = NULL; - cmd_diff(3, (const char **)argv, (const char *)""); + case 1: + argv[1] = "TEMP_1"; + argv[2] = NULL; + cmd_diff(2, (const char **)argv, (const char *)""); + + break; + + case 2: + argv[2] = "TEMP_2"; + argv[3] = NULL; + cmd_diff(3, (const char **)argv, (const char *)""); + + break; + + case 3: + argv[1] = "HEAD"; + argv[2] = NULL; + cmd_diff(2, (const char **)argv, (const char *)""); + + break; + + case 4: + argv[1] = "--cached"; + argv[2] = NULL; + cmd_diff(2, (const char **)argv, (const char *)""); + + break; + + case 5: + argv[1] = "--diff-filter=MRC"; + argv[2] = "HEAD"; + argv[3] = NULL; + cmd_diff(3, (const char **)argv, (const char *)""); + + break; + + case 6: + argv[1] = "--diff-filter=MRC"; + argv[2] = "HEAD^"; + argv[3] = NULL; + cmd_diff(3, (const char **)argv, (const char *)""); + + break; + + case 7: + argv[1] = "-R"; + argv[2] = "HEAD"; + argv[3] = NULL; + cmd_diff(3, (const char **)argv, (const char *)""); + + break; + + case 8: + argv[1] = "master"; + argv[2] = "new_branch"; + argv[3] = NULL; + cmd_diff(3, (const char **)argv, (const char *)""); + + break; + } break; @@ -238,6 +304,13 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) argv[3] = NULL; cmd_diff_tree(3, (const char **)argv, (const char *)""); + argv[0] = "diff-tree"; + argv[1] = "master"; + argv[2] = "new_branch"; + argv[3] = "--"; + argv[4] = NULL; + cmd_diff_tree(4, (const char **)argv, (const char *)""); + break; case GIT_DIFF_INDEX: