87 lines
		
	
	
		
			2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			87 lines
		
	
	
		
			2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
								 | 
							
								#include <stdint.h>
							 | 
						||
| 
								 | 
							
								#include <stdio.h>
							 | 
						||
| 
								 | 
							
								#include <stdlib.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "testinput.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Main procedure for standalone fuzzing engine.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Reads filenames from the argument array. For each filename, read the file
							 | 
						||
| 
								 | 
							
								 * into memory and then call the fuzzing interface with the data.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int main(int argc, char **argv)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  int ii;
							 | 
						||
| 
								 | 
							
								  for(ii = 1; ii < argc; ii++)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    FILE *infile;
							 | 
						||
| 
								 | 
							
								    printf("[%s] ", argv[ii]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* Try and open the file. */
							 | 
						||
| 
								 | 
							
								    infile = fopen(argv[ii], "rb");
							 | 
						||
| 
								 | 
							
								    if(infile)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      uint8_t *buffer = NULL;
							 | 
						||
| 
								 | 
							
								      size_t buffer_len;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      printf("Opened.. ");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /* Get the length of the file. */
							 | 
						||
| 
								 | 
							
								      fseek(infile, 0L, SEEK_END);
							 | 
						||
| 
								 | 
							
								      buffer_len = ftell(infile);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /* Reset the file indicator to the beginning of the file. */
							 | 
						||
| 
								 | 
							
								      fseek(infile, 0L, SEEK_SET);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /* Allocate a buffer for the file contents. */
							 | 
						||
| 
								 | 
							
								      buffer = (uint8_t *)calloc(buffer_len, sizeof(uint8_t));
							 | 
						||
| 
								 | 
							
								      if(buffer)
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        size_t result;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /* Read all the text from the file into the buffer. */
							 | 
						||
| 
								 | 
							
								        result = fread(buffer, sizeof(uint8_t), buffer_len, infile);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (result == buffer_len)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								          printf("Read %zu bytes, fuzzing.. ", buffer_len);
							 | 
						||
| 
								 | 
							
								          /* Call the fuzzer with the data. */
							 | 
						||
| 
								 | 
							
								          LLVMFuzzerTestOneInput(buffer, buffer_len);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          printf("complete !!");
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								          fprintf(stderr,
							 | 
						||
| 
								 | 
							
								                  "Failed to read %zu bytes (result %zu)\n",
							 | 
						||
| 
								 | 
							
								                  buffer_len,
							 | 
						||
| 
								 | 
							
								                  result);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /* Free the buffer as it's no longer needed. */
							 | 
						||
| 
								 | 
							
								        free(buffer);
							 | 
						||
| 
								 | 
							
								        buffer = NULL;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      else
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        fprintf(stderr,
							 | 
						||
| 
								 | 
							
								                "[%s] Failed to allocate %zu bytes \n",
							 | 
						||
| 
								 | 
							
								                argv[ii],
							 | 
						||
| 
								 | 
							
								                buffer_len);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /* Close the file as it's no longer needed. */
							 | 
						||
| 
								 | 
							
								      fclose(infile);
							 | 
						||
| 
								 | 
							
								      infile = NULL;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      /* Failed to open the file. Maybe wrong name or wrong permissions? */
							 | 
						||
| 
								 | 
							
								      fprintf(stderr, "[%s] Open failed. \n", argv[ii]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    printf("\n");
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |