diff --git a/CHANGELOG.md b/CHANGELOG.md index 0aad25d8..5ef707d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ - Fix crash when peer info has missing or unsupported node ids - Add 'auto' mode for detect_address_changes - Improved `TypedXXX` conversion traits, including to and from `Vec` + - Ensure utf8 replacement characters are never emitted in logs - veilid-server: - Use `detect_address_changes: auto` by default diff --git a/veilid-core/src/logging/api_tracing_layer.rs b/veilid-core/src/logging/api_tracing_layer.rs index c2498a64..3c80d21b 100644 --- a/veilid-core/src/logging/api_tracing_layer.rs +++ b/veilid-core/src/logging/api_tracing_layer.rs @@ -134,11 +134,19 @@ impl ApiTracingLayer { .unwrap_or_default(), }; - let message = format!("{} {}", origin, message).trim().to_owned(); + // Dart can't handle the Unicode Replacement Character + // and it causes crashes on multiple Flutter applications + // see: https://gitlab.com/veilid/veilid/-/issues/473 + // We sanitize the logs here because it is generally a good idea to + // ensure only valid UTF8 strings are returned to applications + + let message = format!("{} {}", origin, message) + .trim() + .replace(char::REPLACEMENT_CHARACTER, ""); let backtrace = if log_level <= VeilidLogLevel::Error { let bt = backtrace::Backtrace::new(); - Some(format!("{:?}", bt)) + Some(format!("{:?}", bt).replace(char::REPLACEMENT_CHARACTER, "")) } else { None };