Skip to content

Commit

Permalink
[eclipse-iceoryx#491] Ensure enum string literals are null terminated
Browse files Browse the repository at this point in the history
  • Loading branch information
orecham committed Dec 2, 2024
1 parent 949d2e0 commit 32e86bd
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 5 deletions.
13 changes: 9 additions & 4 deletions iceoryx2-bb/derive-macros/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,10 +118,10 @@ pub fn placement_default_derive(input: TokenStream) -> TokenStream {
/// }
///
/// let v1 = MyEnum::VariantOne;
/// assert_eq!(v1.as_str_literal(), "custom variant one");
/// assert_eq!(v1.as_str_literal(), "custom variant one\0");
///
/// let v2 = MyEnum::VariantTwo;
/// assert_eq!(v2.as_str_literal(), "variant two");
/// assert_eq!(v2.as_str_literal(), "variant two\0");
/// ```
#[proc_macro_derive(StringLiteral, attributes(CustomString))]
pub fn string_literal_derive(input: TokenStream) -> TokenStream {
Expand All @@ -146,7 +146,11 @@ pub fn string_literal_derive(input: TokenStream) -> TokenStream {
Ok(meta) => match &meta.value {
Expr::Lit(ExprLit {
lit: Lit::Str(lit), ..
}) => Some(Literal::string(&lit.value())),
}) => {
let mut value = lit.value();
value.push('\0');
Some(Literal::string(&value))
}
_ => None,
},
_ => None,
Expand All @@ -155,7 +159,7 @@ pub fn string_literal_derive(input: TokenStream) -> TokenStream {
.unwrap_or_else(|| {
// If no CustomString, generates default string literal in the form
// MyEnum::MyVariantName => 'my variant name'
let enum_string_literal = enum_name
let mut enum_string_literal = enum_name
.to_string()
.chars()
.fold(String::new(), |mut acc, c| {
Expand All @@ -171,6 +175,7 @@ pub fn string_literal_derive(input: TokenStream) -> TokenStream {
c => c.to_ascii_lowercase(),
})
.collect::<String>();
enum_string_literal.push('\0');
Literal::string(&enum_string_literal)
});

Expand Down
11 changes: 10 additions & 1 deletion iceoryx2-bb/testing/src/assert.rs
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ macro_rules! assert_that {
}
}
if does_contain {
assert_that!(message_contains_match $lhs, core::stringify!($predicate));
assert_that!(message_not_contains_match $lhs, core::stringify!($predicate));
}
}
};
Expand Down Expand Up @@ -274,6 +274,15 @@ macro_rules! assert_that {
assert_that![color_end]
);
};
[message_not_contains_match $lhs:expr, $predicate:expr] => {
core::panic!(
"assertion failed: {}expr: {} contains element matching predicate: {}{}",
assert_that![color_start],
core::stringify!($lhs),
$predicate,
assert_that![color_end]
);
};
[message_property $lhs:expr, $lval:expr, $property:expr, $rhs:expr] => {
core::panic!(
"assertion failed: {}expr: {}.{} == {}; value: {} == {}{}",
Expand Down

0 comments on commit 32e86bd

Please sign in to comment.