Skip to content

Commit

Permalink
fix: open on symlink path
Browse files Browse the repository at this point in the history
  • Loading branch information
desbma committed Jan 30, 2025
1 parent de0d459 commit 096fc4f
Show file tree
Hide file tree
Showing 5 changed files with 132 additions and 54 deletions.
32 changes: 29 additions & 3 deletions src/strace/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ pub(crate) struct Syscall {
pub rel_ts: f64,
pub name: String,
pub args: Vec<Expression>,
pub ret_val: SyscallRetVal,
pub ret_val: IntegerExpression,
}

#[derive(Debug, Clone, PartialEq)]
Expand All @@ -28,6 +28,12 @@ pub(crate) struct IntegerExpression {
pub metadata: Option<Vec<u8>>,
}

impl IntegerExpression {
pub(crate) fn value(&self) -> Option<i128> {
self.value.value()
}
}

#[derive(Debug, Clone, PartialEq)]
pub(crate) struct BufferExpression {
pub value: Vec<u8>,
Expand Down Expand Up @@ -93,9 +99,29 @@ impl IntegerExpressionValue {
_ => vec![],
}
}
}

pub(crate) type SyscallRetVal = i128; // allows holding both signed and unsigned 64 bit integers
pub(crate) fn value(&self) -> Option<i128> {
match self {
IntegerExpressionValue::BinaryOr(values) => values
.iter()
.map(Self::value)
.collect::<Option<Vec<_>>>()?
.into_iter()
.reduce(|a, b| a | b),
IntegerExpressionValue::Multiplication(values) => values
.iter()
.map(Self::value)
.collect::<Option<Vec<_>>>()?
.into_iter()
.reduce(|a, b| a * b),
IntegerExpressionValue::LeftBitShift { bits, shift } => {
Some(bits.value()? << shift.value()?)
}
IntegerExpressionValue::NamedConst(_) => None,
IntegerExpressionValue::Literal(v) => Some(*v),
}
}
}

#[derive(Ord, PartialOrd, Eq, PartialEq)]
pub(crate) struct StraceVersion {
Expand Down
13 changes: 2 additions & 11 deletions src/strace/parser/combinator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,18 +158,9 @@ fn parse_in_out_argument(i: &str) -> IResult<&str, Expression> {
}

#[function_name::named]
fn parse_ret_val(i: &str) -> IResult<&str, i128> {
fn parse_ret_val(i: &str) -> IResult<&str, IntegerExpression> {
dbg_parser!(i);
map_res(
preceded(terminated(char('='), space1), parse_int_literal),
|e| {
if let IntegerExpressionValue::Literal(v) = e.value {
Ok(v)
} else {
Err("Failed to get return value: {e:?}")
}
},
)(i)
preceded(terminated(char('='), space1), parse_int_literal)(i)
}

// Shared parsers
Expand Down
91 changes: 59 additions & 32 deletions src/strace/parser/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use crate::strace::Syscall;
mod combinator;
use combinator::parse_line;

use super::{Expression, SyscallRetVal};
use super::{Expression, IntegerExpression};

pub(crate) struct LogParser {
reader: Box<dyn BufRead>,
Expand Down Expand Up @@ -69,7 +69,7 @@ impl SyscallStart {
rel_ts: end.rel_ts,
name: self.name,
args: self.args,
ret_val: end.ret_val,
ret_val: end.ret_val.clone(),
}
}
}
Expand All @@ -80,7 +80,7 @@ pub(crate) struct SyscallEnd {
pub pid: u32,
pub rel_ts: f64,
pub name: String,
pub ret_val: SyscallRetVal,
pub ret_val: IntegerExpression,
}

impl Iterator for LogParser {
Expand Down Expand Up @@ -206,7 +206,7 @@ mod tests {
}),

],
ret_val: 0x7f52a332e000
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(0x7f52a332e000), metadata: None }
})
);

Expand Down Expand Up @@ -251,7 +251,7 @@ mod tests {
metadata: None
}),
],
ret_val: 0x7f2fce8dc000
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(0x7f2fce8dc000), metadata: None }
})
);
}
Expand All @@ -278,7 +278,7 @@ mod tests {
metadata: None,
}),
],
ret_val: -1
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(-1), metadata: None }
})
);
}
Expand Down Expand Up @@ -358,7 +358,7 @@ mod tests {
metadata: None
}),
],
ret_val: 0
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(0), metadata: None }
})
);
}
Expand Down Expand Up @@ -431,7 +431,7 @@ mod tests {
metadata: None,
}),
],
ret_val: 0,
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(0), metadata: None }
})
);
}
Expand Down Expand Up @@ -581,7 +581,7 @@ mod tests {
metadata: None
}),
],
ret_val: 0
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(0), metadata: None }
})
);
}
Expand Down Expand Up @@ -612,7 +612,7 @@ mod tests {
metadata: None,
}),
],
ret_val: 8
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(8), metadata: None }
})
);
}
Expand Down Expand Up @@ -737,7 +737,7 @@ mod tests {
),
]))
],
ret_val: 0
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(0), metadata: None }
})
);

Expand Down Expand Up @@ -860,7 +860,7 @@ mod tests {
),
]))
],
ret_val: 0
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(0), metadata: None }
})
);
}
Expand Down Expand Up @@ -896,7 +896,10 @@ mod tests {
metadata: None,
}),
],
ret_val: 3
ret_val: IntegerExpression {
value: IntegerExpressionValue::Literal(3),
metadata: Some("/home/mde/src".as_bytes().to_vec())
}
})
);
}
Expand Down Expand Up @@ -1014,7 +1017,7 @@ mod tests {
metadata: None,
}),
],
ret_val: 20
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(20), metadata: None }
})
);

Expand All @@ -1038,7 +1041,10 @@ mod tests {
metadata: None,
}),
],
ret_val: 832
ret_val: IntegerExpression {
value: IntegerExpressionValue::Literal(832),
metadata: None
}
})
);
}
Expand Down Expand Up @@ -1093,7 +1099,7 @@ mod tests {
metadata: None,
}),
],
ret_val: 0
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(0), metadata: None }
})
);

Expand Down Expand Up @@ -1148,7 +1154,7 @@ mod tests {
metadata: None,
}),
],
ret_val: 0
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(0), metadata: None }
})
);
}
Expand Down Expand Up @@ -1201,7 +1207,7 @@ mod tests {
metadata: None,
}),
],
ret_val: 0
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(0), metadata: None }
})
);
}
Expand Down Expand Up @@ -1260,7 +1266,7 @@ mod tests {
),
])),
],
ret_val: 0
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(0), metadata: None }
})
);

Expand Down Expand Up @@ -1361,7 +1367,7 @@ mod tests {
metadata: None,
}),
],
ret_val: 2
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(2), metadata: None }
})
);
}
Expand Down Expand Up @@ -1409,7 +1415,10 @@ mod tests {
),
])),
],
ret_val: 0
ret_val: IntegerExpression {
value: IntegerExpressionValue::Literal(0),
metadata: None
}
},
Syscall {
pid: 1,
Expand Down Expand Up @@ -1443,7 +1452,10 @@ mod tests {
metadata: None,
}),
],
ret_val: 1
ret_val: IntegerExpression {
value: IntegerExpressionValue::Literal(1),
metadata: None
}
}
]
);
Expand All @@ -1460,7 +1472,10 @@ mod tests {
rel_ts: 0.000022,
name: "getpid".to_owned(),
args: vec![],
ret_val: 641314
ret_val: IntegerExpression {
value: IntegerExpressionValue::Literal(641314),
metadata: None
}
})
);
}
Expand All @@ -1481,7 +1496,7 @@ mod tests {
metadata: Some("/memfd:mozilla-ipc".as_bytes().to_vec()),
}),
],
ret_val: 0
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(0), metadata: None }
})
);
}
Expand Down Expand Up @@ -1568,7 +1583,10 @@ mod tests {
]
},
],
ret_val: 8
ret_val: IntegerExpression {
value: IntegerExpressionValue::Literal(8),
metadata: None
}
})
);
}
Expand Down Expand Up @@ -1610,7 +1628,10 @@ mod tests {
),]
},
],
ret_val: 0
ret_val: IntegerExpression {
value: IntegerExpressionValue::Literal(0),
metadata: None
}
})
);
}
Expand Down Expand Up @@ -2122,7 +2143,7 @@ mod tests {
),
]))
],
ret_val: 0
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(0), metadata: None }
})
);
}
Expand Down Expand Up @@ -2207,7 +2228,10 @@ mod tests {
metadata: None,
}),
],
ret_val: 664773
ret_val: IntegerExpression {
value: IntegerExpressionValue::Literal(664773),
metadata: None
}
})
);

Expand Down Expand Up @@ -2246,7 +2270,7 @@ mod tests {
metadata: None,
}),
],
ret_val: 0
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(0), metadata: None }
})
);
}
Expand Down Expand Up @@ -2293,7 +2317,10 @@ mod tests {
),
])),
],
ret_val: 714434
ret_val: IntegerExpression {
value: IntegerExpressionValue::Literal(714434),
metadata: None
}
})
);
}
Expand Down Expand Up @@ -2358,7 +2385,7 @@ mod tests {
),
])),
],
ret_val: 0
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(0), metadata: None }
})
);
}
Expand Down Expand Up @@ -2443,7 +2470,7 @@ mod tests {
metadata: None,
}),
],
ret_val: 0
ret_val: IntegerExpression { value: IntegerExpressionValue::Literal(0), metadata: None }
})
);
}
Expand Down
Loading

0 comments on commit 096fc4f

Please sign in to comment.