mirror of
https://github.com/facebook/zstd.git
synced 2025-07-29 11:21:22 +03:00
[fuzz] Move from fuzz/ to tests/fuzz/
This commit is contained in:
69
tests/fuzz/regression_driver.c
Normal file
69
tests/fuzz/regression_driver.c
Normal file
@ -0,0 +1,69 @@
|
||||
/**
|
||||
* Copyright (c) 2016-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
#include "fuzz.h"
|
||||
#include "fuzz_helpers.h"
|
||||
#include "util.h"
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(int argc, char const **argv) {
|
||||
size_t const kMaxFileSize = (size_t)1 << 20;
|
||||
int const kFollowLinks = 1;
|
||||
char *fileNamesBuf = NULL;
|
||||
char const **files = argv + 1;
|
||||
unsigned numFiles = argc - 1;
|
||||
uint8_t *buffer = NULL;
|
||||
size_t bufferSize = 0;
|
||||
unsigned i;
|
||||
int ret;
|
||||
|
||||
#ifdef UTIL_HAS_CREATEFILELIST
|
||||
files = UTIL_createFileList(files, numFiles, &fileNamesBuf, &numFiles,
|
||||
kFollowLinks);
|
||||
FUZZ_ASSERT(files);
|
||||
#endif
|
||||
|
||||
for (i = 0; i < numFiles; ++i) {
|
||||
char const *fileName = files[i];
|
||||
size_t const fileSize = UTIL_getFileSize(fileName);
|
||||
size_t readSize;
|
||||
FILE *file;
|
||||
|
||||
/* Check that it is a regular file, and that the fileSize is valid */
|
||||
FUZZ_ASSERT_MSG(UTIL_isRegFile(fileName), fileName);
|
||||
FUZZ_ASSERT_MSG(fileSize <= kMaxFileSize, fileName);
|
||||
/* Ensure we have a large enough buffer allocated */
|
||||
if (fileSize > bufferSize) {
|
||||
free(buffer);
|
||||
buffer = (uint8_t *)malloc(fileSize);
|
||||
FUZZ_ASSERT_MSG(buffer, fileName);
|
||||
bufferSize = fileSize;
|
||||
}
|
||||
/* Open the file */
|
||||
file = fopen(fileName, "rb");
|
||||
FUZZ_ASSERT_MSG(file, fileName);
|
||||
/* Read the file */
|
||||
readSize = fread(buffer, 1, fileSize, file);
|
||||
FUZZ_ASSERT_MSG(readSize == fileSize, fileName);
|
||||
/* Close the file */
|
||||
fclose(file);
|
||||
/* Run the fuzz target */
|
||||
LLVMFuzzerTestOneInput(buffer, fileSize);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
free(buffer);
|
||||
#ifdef UTIL_HAS_CREATEFILELIST
|
||||
UTIL_freeFileList(files, fileNamesBuf);
|
||||
#endif
|
||||
return ret;
|
||||
}
|
Reference in New Issue
Block a user