]> git.proxmox.com Git - efi-boot-shim.git/blobdiff - fuzz-csv.c
New upstream version 15.8
[efi-boot-shim.git] / fuzz-csv.c
diff --git a/fuzz-csv.c b/fuzz-csv.c
new file mode 100644 (file)
index 0000000..bc701df
--- /dev/null
@@ -0,0 +1,71 @@
+// SPDX-License-Identifier: BSD-2-Clause-Patent
+/*
+ * test-csv.c - test our csv parser
+ */
+
+#ifndef SHIM_UNIT_TEST
+#define SHIM_UNIT_TEST
+#endif
+#include "shim.h"
+
+#include <stdio.h>
+
+int
+test_csv_simple_fuzz(char *random_bin, size_t random_bin_len)
+{
+       list_t entry_list;
+       size_t i;
+       char *current, *end;
+       list_t *pos = NULL;
+       EFI_STATUS efi_status;
+
+       INIT_LIST_HEAD(&entry_list);
+
+       current = &random_bin[0];
+       current = current + 1 - 1;
+       end = current + random_bin_len - 1;
+       *end = '\0';
+
+       efi_status = parse_csv_data(current, end, 7, &entry_list);
+       if (efi_status != EFI_SUCCESS)
+               return 0;
+       if (list_size(&entry_list) <= 1)
+               goto fail;
+
+       i = 0;
+       list_for_each(pos, &entry_list) {
+               struct csv_row *csv_row;
+
+               csv_row = list_entry(pos, struct csv_row, list);
+               i++;
+       }
+
+       free_csv_list(&entry_list);
+
+       return 0;
+fail:
+       free_csv_list(&entry_list);
+       return -1;
+}
+
+int
+LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
+{
+       int rc;
+       uint8_t *data_copy;
+
+       if (size < 1)
+               return 0;
+
+       data_copy = malloc(size);
+       if (!data_copy)
+               return -1;
+
+       memcpy(data_copy, data, size);
+       rc = test_csv_simple_fuzz((char *)data_copy, size);
+       free(data_copy);
+
+       return rc; // Values other than 0 and -1 are reserved for future use.
+}
+
+// vim:fenc=utf-8:tw=75:noet