Skip to content

Commit 23aceed

Browse files
authored
Remove Translator from ModifyData in wasm-mutate (#1795)
Same as #1794 except for another use of the `Translator` trait.
1 parent 4db76b8 commit 23aceed

3 files changed

Lines changed: 31 additions & 27 deletions

File tree

crates/wasm-mutate/src/error.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,25 @@ impl From<wasmparser::BinaryReaderError> for Error {
5656
}
5757
}
5858

59-
impl From<wasm_encoder::reencode::Error<Error>> for Error {
60-
fn from(e: wasm_encoder::reencode::Error<Error>) -> Self {
59+
impl<E> From<wasm_encoder::reencode::Error<E>> for Error
60+
where
61+
E: Into<Error> + std::fmt::Display,
62+
{
63+
fn from(e: wasm_encoder::reencode::Error<E>) -> Self {
6164
match e {
6265
wasm_encoder::reencode::Error::ParseError(e) => Error::parse(e),
63-
wasm_encoder::reencode::Error::UserError(e) => e,
66+
wasm_encoder::reencode::Error::UserError(e) => e.into(),
6467
other => Error::other(other.to_string()),
6568
}
6669
}
6770
}
6871

72+
impl From<std::convert::Infallible> for Error {
73+
fn from(i: std::convert::Infallible) -> Error {
74+
match i {}
75+
}
76+
}
77+
6978
/// The kind of error.
7079
#[derive(thiserror::Error, Debug)]
7180
pub enum ErrorKind {

crates/wasm-mutate/src/mutators/modify_data.rs

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
use super::translate::ConstExprKind;
21
use super::Mutator;
3-
use crate::mutators::{DefaultTranslator, Translator};
42
use crate::{Result, WasmMutate};
53
use rand::Rng;
6-
use wasm_encoder::{DataSection, DataSegment, DataSegmentMode, Module};
4+
use wasm_encoder::reencode::{Reencode, RoundtripReencoder};
5+
use wasm_encoder::{DataSection, Module};
76
use wasmparser::{DataKind, DataSectionReader};
87

98
/// Mutator that modifies a data segment, either adding or removing bytes.
@@ -29,32 +28,29 @@ impl Mutator for ModifyDataMutator {
2928
// them to the `new_section` one-by-one.
3029
for (i, data) in reader.into_iter().enumerate() {
3130
let data = data?;
32-
let offset;
33-
// Preserve the mode of the data segment
34-
let mode = match &data.kind {
31+
// If this is the correct data segment apply the mutation,
32+
// otherwise preserve the data.
33+
let mut contents = data.data.to_vec();
34+
if i as u32 == data_to_modify {
35+
config.raw_mutate(&mut contents, self.max_data_size)?;
36+
}
37+
38+
// Add the data segment to the section that we're building
39+
match data.kind {
3540
DataKind::Active {
3641
memory_index,
3742
offset_expr,
3843
} => {
39-
offset = DefaultTranslator.translate_const_expr(
40-
offset_expr,
41-
&wasmparser::ValType::I32,
42-
ConstExprKind::DataOffset,
43-
)?;
44-
DataSegmentMode::Active {
45-
memory_index: *memory_index,
46-
offset: &offset,
47-
}
44+
new_section.active(
45+
memory_index,
46+
&RoundtripReencoder.const_expr(offset_expr)?,
47+
contents,
48+
);
49+
}
50+
DataKind::Passive => {
51+
new_section.passive(contents);
4852
}
49-
DataKind::Passive => DataSegmentMode::Passive,
5053
};
51-
// If this is the correct data segment apply the mutation,
52-
// otherwise preserve the data.
53-
let mut data = data.data.to_vec();
54-
if i as u32 == data_to_modify {
55-
config.raw_mutate(&mut data, self.max_data_size)?;
56-
}
57-
new_section.segment(DataSegment { mode, data });
5854
}
5955

6056
Ok(Box::new(std::iter::once(Ok(config

crates/wasm-mutate/src/mutators/translate.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ pub enum ConstExprKind {
1919
Global,
2020
ElementOffset,
2121
ElementFunction,
22-
DataOffset,
2322
}
2423

2524
pub trait Translator {

0 commit comments

Comments
 (0)