diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /js/src/fuzz-tests/gluesmith | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/fuzz-tests/gluesmith')
-rw-r--r-- | js/src/fuzz-tests/gluesmith/Cargo.toml | 10 | ||||
-rw-r--r-- | js/src/fuzz-tests/gluesmith/moz.build | 15 | ||||
-rw-r--r-- | js/src/fuzz-tests/gluesmith/src/lib.rs | 75 |
3 files changed, 100 insertions, 0 deletions
diff --git a/js/src/fuzz-tests/gluesmith/Cargo.toml b/js/src/fuzz-tests/gluesmith/Cargo.toml new file mode 100644 index 0000000000..42c8cec4f2 --- /dev/null +++ b/js/src/fuzz-tests/gluesmith/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "gluesmith" +version = "0.1.0" +authors = ["Christian Holler"] +license = "MPL-2.0" + +[dependencies] +wasm-smith = "0.12.5" +arbitrary = { version = "1.0.0", features = ["derive"] } +libc = "0.2" diff --git a/js/src/fuzz-tests/gluesmith/moz.build b/js/src/fuzz-tests/gluesmith/moz.build new file mode 100644 index 0000000000..d75c4c18ba --- /dev/null +++ b/js/src/fuzz-tests/gluesmith/moz.build @@ -0,0 +1,15 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +FINAL_LIBRARY = "js" + +# Includes should be relative to parent path +LOCAL_INCLUDES += ["!../..", "../.."] + +include("../../js-config.mozbuild") +include("../../js-cxxflags.mozbuild") + +DIRS += ["../../rust"] diff --git a/js/src/fuzz-tests/gluesmith/src/lib.rs b/js/src/fuzz-tests/gluesmith/src/lib.rs new file mode 100644 index 0000000000..2efb678a03 --- /dev/null +++ b/js/src/fuzz-tests/gluesmith/src/lib.rs @@ -0,0 +1,75 @@ +/* Copyright 2021 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +extern crate arbitrary; +extern crate wasm_smith; + +use arbitrary::{Arbitrary, Unstructured}; +use wasm_smith::{Config, Module}; + +use std::ptr; + +// A custom configuration to enable all experimental features that we have +// some support for. +#[derive(Arbitrary, Debug)] +struct SpiderMonkeyConfig; + +impl Config for SpiderMonkeyConfig { + fn bulk_memory_enabled(&self) -> bool { + true + } + fn reference_types_enabled(&self) -> bool { + true + } + fn exceptions_enabled(&self) -> bool { + true + } + fn memory64_enabled(&self) -> bool { + true + } + fn simd_enabled(&self) -> bool { + true + } +} + +#[no_mangle] +pub unsafe extern "C" fn gluesmith( + data: *mut u8, + len: usize, + out: *mut u8, + maxlen: usize, +) -> usize { + let buf: &[u8] = std::slice::from_raw_parts(data, len); + + let mut u = Unstructured::new(buf); + + let module = match Module::new(SpiderMonkeyConfig {}, &mut u) { + Ok(m) => m, + Err(_e) => return 0, + }; + + let wasm_bytes = module.to_bytes(); + + let src_len = wasm_bytes.len(); + + if src_len > maxlen { + return 0; + } + + let src_ptr = wasm_bytes.as_ptr(); + ptr::copy_nonoverlapping(src_ptr, out, src_len); + + return src_len; +} |