Remove GLSL SPIRV-Cross fuzzer
Releasing this configuration is no longer part of the PoR, so no need to fuzz it. BUG=dawn:683,chromium:904410 Change-Id: Ic499c68d48b88240361f4ffa937c878b3e3c8526 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/41760 Commit-Queue: Ryan Harrison <rharrison@chromium.org> Commit-Queue: Austin Eng <enga@chromium.org> Auto-Submit: Ryan Harrison <rharrison@chromium.org> Reviewed-by: Austin Eng <enga@chromium.org>
This commit is contained in:
parent
71b8c9f4ad
commit
6dd34f7e34
|
@ -69,17 +69,6 @@ if (build_with_chromium) {
|
|||
}
|
||||
}
|
||||
|
||||
static_library("dawn_spirv_cross_fuzzer_common") {
|
||||
sources = [
|
||||
"DawnSPIRVCrossFuzzer.cpp",
|
||||
"DawnSPIRVCrossFuzzer.h",
|
||||
]
|
||||
public_deps = [
|
||||
"${dawn_root}/third_party/gn/spirv_cross:spirv_cross",
|
||||
"${dawn_spirv_tools_dir}:spvtools_val",
|
||||
]
|
||||
}
|
||||
|
||||
static_library("dawn_wire_server_fuzzer_common") {
|
||||
sources = [
|
||||
"DawnWireServerFuzzer.cpp",
|
||||
|
@ -95,15 +84,6 @@ static_library("dawn_wire_server_fuzzer_common") {
|
|||
]
|
||||
}
|
||||
|
||||
# TODO(rharrison): Remove asan_options once signal trap is no longer
|
||||
# needed.
|
||||
# Uses Dawn specific options and varies input data
|
||||
dawn_fuzzer_test("dawn_spirv_cross_glsl_fast_fuzzer") {
|
||||
sources = [ "DawnSPIRVCrossGLSLFastFuzzer.cpp" ]
|
||||
deps = [ ":dawn_spirv_cross_fuzzer_common" ]
|
||||
asan_options = [ "allow_user_segv_handler=1" ]
|
||||
}
|
||||
|
||||
dawn_fuzzer_test("dawn_wire_server_and_frontend_fuzzer") {
|
||||
sources = [ "DawnWireServerAndFrontendFuzzer.cpp" ]
|
||||
|
||||
|
@ -134,7 +114,6 @@ dawn_fuzzer_test("dawn_wire_server_and_vulkan_backend_fuzzer") {
|
|||
group("dawn_fuzzers") {
|
||||
testonly = true
|
||||
deps = [
|
||||
":dawn_spirv_cross_glsl_fast_fuzzer",
|
||||
":dawn_wire_server_and_frontend_fuzzer",
|
||||
":dawn_wire_server_and_vulkan_backend_fuzzer",
|
||||
]
|
||||
|
|
|
@ -1,108 +0,0 @@
|
|||
// Copyright 2018 The Dawn Authors
|
||||
//
|
||||
// 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.
|
||||
|
||||
#include <csetjmp>
|
||||
#include <csignal>
|
||||
#include <cstdint>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <spirv-tools/libspirv.hpp>
|
||||
#ifdef DAWN_ENABLE_WGSL
|
||||
# include <tint/tint.h>
|
||||
#endif // DAWN_ENABLE_WGSL
|
||||
|
||||
#include "DawnSPIRVCrossFuzzer.h"
|
||||
|
||||
namespace {
|
||||
|
||||
std::jmp_buf jump_buffer;
|
||||
void (*old_signal_handler)(int);
|
||||
|
||||
// Handler to trap signals, so that it doesn't crash the fuzzer when running
|
||||
// the code under test. The code being fuzzed uses abort() to report errors
|
||||
// like bad input instead of returning an error code.
|
||||
[[noreturn]] static void sigabrt_trap(int) {
|
||||
std::longjmp(jump_buffer, 1);
|
||||
}
|
||||
|
||||
// Setup the SIGABRT trap
|
||||
void BeginSIGABRTTrap() {
|
||||
old_signal_handler = signal(SIGABRT, sigabrt_trap);
|
||||
if (old_signal_handler == SIG_ERR)
|
||||
abort();
|
||||
}
|
||||
|
||||
// Restore the previous signal handler
|
||||
void EndSIGABRTTrap() {
|
||||
signal(SIGABRT, old_signal_handler);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace DawnSPIRVCrossFuzzer {
|
||||
|
||||
void ExecuteWithSignalTrap(std::function<void()> exec) {
|
||||
BeginSIGABRTTrap();
|
||||
|
||||
// On the first pass through setjmp will return 0, if returning here
|
||||
// from the longjmp in the signal handler it will return 1.
|
||||
if (setjmp(jump_buffer) == 0) {
|
||||
exec();
|
||||
}
|
||||
|
||||
EndSIGABRTTrap();
|
||||
}
|
||||
|
||||
int Run(const uint8_t* data, size_t size, Task task) {
|
||||
size_t sizeInU32 = size / sizeof(uint32_t);
|
||||
const uint32_t* u32Data = reinterpret_cast<const uint32_t*>(data);
|
||||
std::vector<uint32_t> input(u32Data, u32Data + sizeInU32);
|
||||
|
||||
// Using Tint SPIRV->SPIRV to normalize inputs if supported.
|
||||
#ifdef DAWN_ENABLE_WGSL
|
||||
tint::Program program = tint::reader::wgsl::Parse(file);
|
||||
if (!program.IsValid()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
tint::writer::spirv::Generator generator(&program);
|
||||
if (!generator.Generate()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::vector<uint32_t> spirv = generator.result();
|
||||
#else
|
||||
std::vector<uint32_t> spirv = std::move(input);
|
||||
#endif
|
||||
|
||||
spvtools::SpirvTools spirvTools(SPV_ENV_VULKAN_1_1);
|
||||
spirvTools.SetMessageConsumer(
|
||||
[](spv_message_level_t, const char*, const spv_position_t&, const char*) {});
|
||||
|
||||
// Dawn is responsible to validating inputs before they go to
|
||||
// SPIRV-Cross.
|
||||
if (!spirvTools.Validate(spirv.data(), spirv.size())) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (spirv.size() != 0) {
|
||||
task(spirv);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
} // namespace DawnSPIRVCrossFuzzer
|
|
@ -1,29 +0,0 @@
|
|||
// Copyright 2018 The Dawn Authors
|
||||
//
|
||||
// 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.
|
||||
|
||||
#include <cstdint>
|
||||
#include <functional>
|
||||
#include <vector>
|
||||
|
||||
namespace DawnSPIRVCrossFuzzer {
|
||||
|
||||
using Task = std::function<int(const std::vector<uint32_t>&)>;
|
||||
|
||||
// Used to wrap code that may fire a SIGABRT. Do not allocate anything local within |exec|, as
|
||||
// it is not guaranteed to return.
|
||||
void ExecuteWithSignalTrap(std::function<void()> exec);
|
||||
|
||||
// Used to fuzz by mutating the input data, but with fixed options to the compiler
|
||||
int Run(const uint8_t* data, size_t size, Task task);
|
||||
} // namespace DawnSPIRVCrossFuzzer
|
|
@ -1,50 +0,0 @@
|
|||
// Copyright 2018 The Dawn Authors
|
||||
//
|
||||
// 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.
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <spirv_glsl.hpp>
|
||||
|
||||
#include "DawnSPIRVCrossFuzzer.h"
|
||||
|
||||
namespace {
|
||||
int GLSLFastFuzzTask(const std::vector<uint32_t>& input) {
|
||||
// Values come from ShaderModuleGL.cpp
|
||||
spirv_cross::CompilerGLSL::Options options;
|
||||
options.vertex.flip_vert_y = true;
|
||||
options.vertex.fixup_clipspace = true;
|
||||
#if defined(DAWN_PLATFORM_APPLE)
|
||||
options.version = 410;
|
||||
#else
|
||||
options.version = 440;
|
||||
#endif
|
||||
|
||||
spirv_cross::CompilerGLSL compiler(input);
|
||||
compiler.set_common_options(options);
|
||||
compiler.compile();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
extern "C" int LLVMFuzzerInitialize(int* argc, char*** argv) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
|
||||
return DawnSPIRVCrossFuzzer::Run(data, size, GLSLFastFuzzTask);
|
||||
}
|
Loading…
Reference in New Issue