1*01826a49SYabin Cui /* 2*01826a49SYabin Cui * Copyright (c) Meta Platforms, Inc. and affiliates. 3*01826a49SYabin Cui * All rights reserved. 4*01826a49SYabin Cui * 5*01826a49SYabin Cui * This source code is licensed under both the BSD-style license (found in the 6*01826a49SYabin Cui * LICENSE file in the root directory of this source tree) and the GPLv2 (found 7*01826a49SYabin Cui * in the COPYING file in the root directory of this source tree). 8*01826a49SYabin Cui * You may select, at your option, one of the above-listed licenses. 9*01826a49SYabin Cui */ 10*01826a49SYabin Cui /** 11*01826a49SYabin Cui * Helper functions for fuzzing. 12*01826a49SYabin Cui */ 13*01826a49SYabin Cui 14*01826a49SYabin Cui #ifndef ZSTD_HELPERS_H 15*01826a49SYabin Cui #define ZSTD_HELPERS_H 16*01826a49SYabin Cui 17*01826a49SYabin Cui #define ZSTD_STATIC_LINKING_ONLY 18*01826a49SYabin Cui 19*01826a49SYabin Cui #include "zstd.h" 20*01826a49SYabin Cui #include "zstd_errors.h" 21*01826a49SYabin Cui #include "fuzz_data_producer.h" 22*01826a49SYabin Cui #include <stdint.h> 23*01826a49SYabin Cui 24*01826a49SYabin Cui #ifdef __cplusplus 25*01826a49SYabin Cui extern "C" { 26*01826a49SYabin Cui #endif 27*01826a49SYabin Cui 28*01826a49SYabin Cui extern const int kMinClevel; 29*01826a49SYabin Cui extern const int kMaxClevel; 30*01826a49SYabin Cui 31*01826a49SYabin Cui void FUZZ_setRandomParameters(ZSTD_CCtx *cctx, size_t srcSize, FUZZ_dataProducer_t *producer); 32*01826a49SYabin Cui 33*01826a49SYabin Cui ZSTD_compressionParameters FUZZ_randomCParams(size_t srcSize, FUZZ_dataProducer_t *producer); 34*01826a49SYabin Cui ZSTD_frameParameters FUZZ_randomFParams(FUZZ_dataProducer_t *producer); 35*01826a49SYabin Cui ZSTD_parameters FUZZ_randomParams(size_t srcSize, FUZZ_dataProducer_t *producer); 36*01826a49SYabin Cui 37*01826a49SYabin Cui typedef struct { 38*01826a49SYabin Cui void* buff; 39*01826a49SYabin Cui size_t size; 40*01826a49SYabin Cui } FUZZ_dict_t; 41*01826a49SYabin Cui 42*01826a49SYabin Cui /* Quickly train a dictionary from a source for fuzzing. 43*01826a49SYabin Cui * NOTE: Don't use this to train production dictionaries, it is only optimized 44*01826a49SYabin Cui * for speed, and doesn't care about dictionary quality. 45*01826a49SYabin Cui */ 46*01826a49SYabin Cui FUZZ_dict_t FUZZ_train(void const* src, size_t srcSize, FUZZ_dataProducer_t *producer); 47*01826a49SYabin Cui 48*01826a49SYabin Cui #ifdef FUZZ_THIRD_PARTY_SEQ_PROD 49*01826a49SYabin Cui extern void* FUZZ_seqProdState; 50*01826a49SYabin Cui #endif 51*01826a49SYabin Cui 52*01826a49SYabin Cui #ifdef __cplusplus 53*01826a49SYabin Cui } 54*01826a49SYabin Cui #endif 55*01826a49SYabin Cui 56*01826a49SYabin Cui #endif /* ZSTD_HELPERS_H */ 57