From 44d46a6702c966527ed22c07b2df19bee55a2119 Mon Sep 17 00:00:00 2001 From: "Lei, HUANG" <6406592+v0y4g3r@users.noreply.github.com> Date: Mon, 13 Oct 2025 19:59:26 +0800 Subject: [PATCH] fix: correct impl Clear for &[u8] (#7081) * fix: correct impl Clear for &[u8] * fix: clippy Signed-off-by: Lei, HUANG --------- Signed-off-by: Lei, HUANG --- src/servers/src/repeated_field.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/servers/src/repeated_field.rs b/src/servers/src/repeated_field.rs index 42e22d367a..63dd83f94a 100644 --- a/src/servers/src/repeated_field.rs +++ b/src/servers/src/repeated_field.rs @@ -32,6 +32,8 @@ use std::{fmt, slice, vec}; use bytes::Bytes; +const NULL_BYTES: &[u8] = &[]; + /// anything that can be cleared pub trait Clear { /// Clear this make, make it equivalent to newly created object. @@ -39,7 +41,9 @@ pub trait Clear { } impl Clear for &[u8] { - fn clear(&mut self) {} + fn clear(&mut self) { + *self = NULL_BYTES; + } } impl Clear for Option { @@ -512,3 +516,18 @@ impl fmt::Debug for RepeatedField { self.as_ref().fmt(f) } } + +#[cfg(test)] +mod tests { + use crate::repeated_field::RepeatedField; + + #[test] + fn test_null_ptr() { + let mut vec: RepeatedField<&'static [u8]> = RepeatedField::new(); + let borrowed_value = vec.push_default(); + *borrowed_value = b"hello"; + vec.clear(); + let new_value = vec.push_default(); + assert!((*new_value).is_empty()); + } +}