From 0506acf254b04ebea3708afff090f421e932c1c5 Mon Sep 17 00:00:00 2001 From: Ritchie Vink Date: Fri, 10 Jun 2022 13:48:34 +0200 Subject: [PATCH 1/2] omit bound check in lexical write --- src/util/lexical.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/util/lexical.rs b/src/util/lexical.rs index 970c972e0af..623b7d84715 100644 --- a/src/util/lexical.rs +++ b/src/util/lexical.rs @@ -19,7 +19,10 @@ pub fn lexical_to_bytes_mut(n: N, buf: &mut Vec) // Length of buf is set as written length afterwards. lexical_core // creates a valid string, so doesn't need to be checked. let slice = std::slice::from_raw_parts_mut(buf.as_mut_ptr(), buf.capacity()); - let len = lexical_core::write(n, slice).len(); + + // Safety: + // Omits an unneeded bound check as we just ensured that we reserved `N::FORMATTED_SIZE_DECIMAL` + let len = lexical_core::write_unchecked(n, slice).len(); buf.set_len(len); } } From 8b84f3d8bb6082d1462c6654fa408c47d569bda4 Mon Sep 17 00:00:00 2001 From: Ritchie Vink Date: Fri, 10 Jun 2022 14:05:44 +0200 Subject: [PATCH 2/2] debug assert --- src/util/lexical.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/util/lexical.rs b/src/util/lexical.rs index 623b7d84715..047986cbbed 100644 --- a/src/util/lexical.rs +++ b/src/util/lexical.rs @@ -22,8 +22,16 @@ pub fn lexical_to_bytes_mut(n: N, buf: &mut Vec) // Safety: // Omits an unneeded bound check as we just ensured that we reserved `N::FORMATTED_SIZE_DECIMAL` - let len = lexical_core::write_unchecked(n, slice).len(); - buf.set_len(len); + #[cfg(debug_assertions)] + { + let len = lexical_core::write(n, slice).len(); + buf.set_len(len); + } + #[cfg(not(debug_assertions))] + { + let len = lexical_core::write_unchecked(n, slice).len(); + buf.set_len(len); + } } }