Ignore PNG chunk CRCs in Rust PNG fuzzing builds `rust/png/FFI.rs` already skips chunk CRC checks under `cfg!(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)`, but nothing in Skia's GN -> Bazel build set that cfg. As a result, fuzzers built with `skia_build_fuzzers=true` rejected almost every mutated input with a CRC `FormatError` before reaching the decoding logic. Add a `//rust/png:fuzzing_build_mode` Bazel flag (mirroring `//rust/png:for_android`) that passes the cfg to rustc, and set it from GN when `skia_build_fuzzers` is true. Bug: b/562799124 Change-Id: Iaa5e23396bd14eaeb59782af4e8297264a14b625 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1379816 Reviewed-by: Ćukasz Anforowicz <lukasza@google.com> Reviewed-by: Florin Malita <fmalita@google.com> Commit-Queue: Elliot Sisteron <elliotsisteron@google.com>
diff --git a/BUILD.gn b/BUILD.gn index 0663bb5..d5d717d 100644 --- a/BUILD.gn +++ b/BUILD.gn
@@ -1476,6 +1476,11 @@ } else { bazel_args += [ "--//rust/png:for_android=false" ] } + if (skia_build_fuzzers) { + bazel_args += [ "--//rust/png:fuzzing_build_mode=true" ] + } else { + bazel_args += [ "--//rust/png:fuzzing_build_mode=false" ] + } } if (skia_use_rust_bmp_decode) {
diff --git a/rust/png/BUILD.bazel b/rust/png/BUILD.bazel index 4c53452..e68d803 100644 --- a/rust/png/BUILD.bazel +++ b/rust/png/BUILD.bazel
@@ -19,6 +19,13 @@ default = True, ) +# Set for fuzzing builds (e.g. `skia_build_fuzzers=true` in GN), so that `FFI.rs` +# skips checks such as chunk CRCs that would otherwise reject most mutated inputs. +bool_flag( + name = "fuzzing_build_mode", + default = False, +) + skia_filegroup( name = "rs_srcs", srcs = ["FFI.rs"], @@ -64,7 +71,10 @@ "//conditions:default": [], }), crate_root = "FFI.rs", - rustc_flags = ["-Dwarnings"], + rustc_flags = ["-Dwarnings"] + select({ + ":fuzzing_build_mode_true": ["--cfg=FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION"], + "//conditions:default": [], + }), visibility = [ "//src/codec:__pkg__", "//src/encode:__pkg__",