зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1601946
- Pre 1: Add a fuzzing test for database names, r=truber
Depends on D56335 Differential Revision: https://phabricator.services.mozilla.com/D56336 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
de4eb52c3b
Коммит
595b0a6768
|
@ -9,5 +9,6 @@
|
|||
int FuzzingInitDummy(int* argc, char*** argv) { return 0; }
|
||||
|
||||
MOZ_FUZZING_INTERFACE_RAW(FuzzingInitDummy, fuzz_rkv_db_file, RkvDbFile);
|
||||
MOZ_FUZZING_INTERFACE_RAW(FuzzingInitDummy, fuzz_rkv_db_name, RkvDbName);
|
||||
MOZ_FUZZING_INTERFACE_RAW(FuzzingInitDummy, fuzz_rkv_key_write, RkvKeyWrite);
|
||||
MOZ_FUZZING_INTERFACE_RAW(FuzzingInitDummy, fuzz_rkv_val_write, RkvValWrite);
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
extern "C" {
|
||||
|
||||
int fuzz_rkv_db_file(const uint8_t* raw_data, size_t size);
|
||||
int fuzz_rkv_db_name(const uint8_t* raw_data, size_t size);
|
||||
int fuzz_rkv_key_write(const uint8_t* raw_data, size_t size);
|
||||
int fuzz_rkv_val_write(const uint8_t* raw_data, size_t size);
|
||||
|
||||
|
|
|
@ -44,6 +44,27 @@ pub extern "C" fn fuzz_rkv_db_file(raw_data: *const u8, size: libc::size_t) -> l
|
|||
let reader = env.read().unwrap();
|
||||
eat_lmdb_err(store.get(&reader, &[0])).unwrap();
|
||||
|
||||
0
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fuzz_rkv_db_name(raw_data: *const u8, size: libc::size_t) -> libc::c_int {
|
||||
let data = unsafe { std::slice::from_raw_parts(raw_data as *const u8, size as usize) };
|
||||
|
||||
let root = Builder::new().prefix("fuzz_rkv_db_name").tempdir().unwrap();
|
||||
fs::create_dir_all(root.path()).unwrap();
|
||||
|
||||
let env = rkv::Rkv::new(root.path()).unwrap();
|
||||
let name = String::from_utf8_lossy(data);
|
||||
println!("Checking string: '{:?}'", name);
|
||||
// Some strings are invalid database names, and are handled as store errors.
|
||||
// Ignore those errors, but not others.
|
||||
let store = eat_lmdb_err(env.open_single(name.as_ref(), rkv::StoreOptions::create())).unwrap();
|
||||
|
||||
if let Some(store) = store {
|
||||
let reader = env.read().unwrap();
|
||||
eat_lmdb_err(store.get(&reader, &[0])).unwrap();
|
||||
};
|
||||
|
||||
0
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче