Skip to content

Commit

Permalink
Fix string truncation
Browse files Browse the repository at this point in the history
  • Loading branch information
Jake-Shadle committed Mar 5, 2024
1 parent 7e0eca4 commit aee0d0a
Showing 1 changed file with 27 additions and 2 deletions.
29 changes: 27 additions & 2 deletions sdk/src/activity.rs
Original file line number Diff line number Diff line change
Expand Up @@ -751,8 +751,20 @@ fn truncate(text: Option<impl Into<String>>, name: &str) -> Option<String> {
text.and_then(|text| {
let mut text = text.into();
if text.len() > 128 {
tracing::warn!("{} '{}' is too long and will be truncated", name, text);
text.truncate(128);
tracing::warn!("{name} '{text}' is too long and will be truncated");

// TODO: Just use https://doc.rust-lang.org/std/primitive.str.html#method.floor_char_boundary
// when it is stabilized
let lower_bound = 125;
// Find the highest character boundary between our max and the lowest possible one
let new_index = text.as_bytes()[125..=128].iter().rposition(|b| {
// This is bit magic equivalent to: b < 128 || b >= 192
(*b as i8) >= -0x40
});

text.truncate(
lower_bound + new_index.expect("character boundary not found within 4 bytes"),
);
}

// Ensure the strings don't have just whitespace, as they are also not
Expand Down Expand Up @@ -799,6 +811,19 @@ mod test {
insta::assert_json_snapshot!(cmd);
}

#[test]
fn truncate() {
let s = super::truncate(
Some("xäääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääää"),
"test",
)
.unwrap();
assert_eq!(
s,
"xäääääääääääääääääääääääääääääääääääääääääääääääääääääääääääääää"
);
}

#[test]
fn asset_keys() {
assert!(Assets::validate_key("tiny_key"));
Expand Down

0 comments on commit aee0d0a

Please sign in to comment.