Skip to content

Commit 88e262a

Browse files
committed
Change glide-core function to be unsafe
Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>
1 parent 37d94ef commit 88e262a

File tree

2 files changed

+28
-36
lines changed

2 files changed

+28
-36
lines changed

ffi/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2065,7 +2065,7 @@ pub extern "C" fn create_batch_otel_span_with_parent(parent_span_ptr: u64) -> u6
20652065
}
20662066

20672067
// Convert parent pointer to GlideSpan and use existing add_span method
2068-
let span = match GlideOpenTelemetry::safe_span_from_pointer(parent_span_ptr) {
2068+
let span = match unsafe { GlideOpenTelemetry::span_from_pointer(parent_span_ptr) } {
20692069
Ok(parent_span) => {
20702070
// Use existing add_span method to create child batch span
20712071
match parent_span.add_span(command_name) {
@@ -2274,7 +2274,7 @@ pub extern "C" fn create_otel_span_with_parent(
22742274
}
22752275

22762276
// Convert parent pointer to GlideSpan and use existing add_span method
2277-
let span = match GlideOpenTelemetry::safe_span_from_pointer(parent_span_ptr) {
2277+
let span = match unsafe { GlideOpenTelemetry::span_from_pointer(parent_span_ptr) } {
22782278
Ok(parent_span) => {
22792279
// Use existing add_span method to create child span
22802280
match parent_span.add_span(command_name) {

glide-core/telemetry/src/open_telemetry.rs

Lines changed: 26 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ static OTEL: OnceCell<RwLock<GlideOpenTelemetry>> = OnceCell::new();
478478

479479
/// Our interface to OpenTelemetry
480480
impl GlideOpenTelemetry {
481-
/// Validate if a span pointer is valid and safe to use
481+
/// Validate if a span pointer is valid
482482
///
483483
/// # Arguments
484484
/// * `span_ptr` - The u64 span pointer to validate
@@ -490,7 +490,7 @@ impl GlideOpenTelemetry {
490490
/// # Safety
491491
/// This function performs basic validation but cannot guarantee the pointer points to valid memory.
492492
/// It only checks for obvious invalid values like null pointers and unreasonable addresses.
493-
pub fn is_span_pointer_valid(span_ptr: u64) -> bool {
493+
pub unsafe fn is_span_pointer_valid(span_ptr: u64) -> bool {
494494
// Check for null pointer
495495
if span_ptr == 0 {
496496
logger_core::log_warn("OpenTelemetry", "Invalid span pointer - null pointer (0)");
@@ -536,7 +536,7 @@ impl GlideOpenTelemetry {
536536
true
537537
}
538538

539-
/// Safely convert a span pointer to a GlideSpan with validation
539+
/// Convert a span pointer to a GlideSpan with validation
540540
///
541541
/// # Arguments
542542
/// * `span_ptr` - The u64 span pointer to convert
@@ -547,11 +547,9 @@ impl GlideOpenTelemetry {
547547
///
548548
/// # Safety
549549
/// This function validates the pointer before attempting conversion, but still uses unsafe code
550-
/// to perform the actual pointer conversion. The caller must ensure the pointer was created
551-
/// by the FFI layer using Arc::into_raw().
552-
pub fn safe_span_from_pointer(span_ptr: u64) -> Result<GlideSpan, TraceError> {
550+
pub unsafe fn span_from_pointer(span_ptr: u64) -> Result<GlideSpan, TraceError> {
553551
// First validate the pointer
554-
if !Self::is_span_pointer_valid(span_ptr) {
552+
if !unsafe { Self::is_span_pointer_valid(span_ptr) } {
555553
return Err(TraceError::from(format!(
556554
"Invalid span pointer: 0x{:x} failed validation checks",
557555
span_ptr
@@ -1132,41 +1130,35 @@ mod tests {
11321130
#[test]
11331131
fn test_span_pointer_validation() {
11341132
// Test null pointer validation
1135-
assert!(!GlideOpenTelemetry::is_span_pointer_valid(0));
1133+
assert!(unsafe { !GlideOpenTelemetry::is_span_pointer_valid(0) });
11361134

11371135
// Test misaligned pointer validation
1138-
assert!(!GlideOpenTelemetry::is_span_pointer_valid(0x1001)); // Not 8-byte aligned
1139-
assert!(!GlideOpenTelemetry::is_span_pointer_valid(0x1002)); // Not 8-byte aligned
1140-
assert!(!GlideOpenTelemetry::is_span_pointer_valid(0x1007)); // Not 8-byte aligned
1136+
assert!(unsafe { !GlideOpenTelemetry::is_span_pointer_valid(0x1001) }); // Not 8-byte aligned
1137+
assert!(unsafe { !GlideOpenTelemetry::is_span_pointer_valid(0x1002) }); // Not 8-byte aligned
1138+
assert!(unsafe { !GlideOpenTelemetry::is_span_pointer_valid(0x1007) }); // Not 8-byte aligned
11411139

11421140
// Test address too low validation
1143-
assert!(!GlideOpenTelemetry::is_span_pointer_valid(0x800)); // Below MIN_VALID_ADDRESS
1144-
assert!(!GlideOpenTelemetry::is_span_pointer_valid(0x100)); // Way too low
1141+
assert!(unsafe { !GlideOpenTelemetry::is_span_pointer_valid(0x800) }); // Below MIN_VALID_ADDRESS
1142+
assert!(unsafe { !GlideOpenTelemetry::is_span_pointer_valid(0x100) }); // Way too low
11451143

11461144
// Test address too high validation
1147-
assert!(!GlideOpenTelemetry::is_span_pointer_valid(
1148-
0x8000_0000_0000_0000
1149-
)); // Above MAX_VALID_ADDRESS
1150-
assert!(!GlideOpenTelemetry::is_span_pointer_valid(
1151-
0xFFFF_FFFF_FFFF_FFFF
1152-
)); // Maximum u64
1145+
assert!(unsafe { !GlideOpenTelemetry::is_span_pointer_valid(0x8000_0000_0000_0000) }); // Above MAX_VALID_ADDRESS
1146+
assert!(unsafe { !GlideOpenTelemetry::is_span_pointer_valid(0xFFFF_FFFF_FFFF_FFFF) }); // Maximum u64
11531147

11541148
// Test valid pointer ranges
1155-
assert!(GlideOpenTelemetry::is_span_pointer_valid(0x1000)); // Minimum valid
1156-
assert!(GlideOpenTelemetry::is_span_pointer_valid(0x10000)); // Reasonable heap address
1157-
assert!(GlideOpenTelemetry::is_span_pointer_valid(
1158-
0x7FFF_FFFF_FFFF_FFF8
1159-
)); // Near maximum valid
1149+
assert!(unsafe { GlideOpenTelemetry::is_span_pointer_valid(0x1000) }); // Minimum valid
1150+
assert!(unsafe { GlideOpenTelemetry::is_span_pointer_valid(0x10000) }); // Reasonable heap address
1151+
assert!(unsafe { GlideOpenTelemetry::is_span_pointer_valid(0x7FFF_FFFF_FFFF_FFF8) }); // Near maximum valid
11601152
}
11611153

11621154
#[test]
1163-
fn test_safe_span_from_pointer_validation() {
1155+
fn test_span_from_pointer_validation() {
11641156
let rt = shared_runtime();
11651157
rt.block_on(async {
11661158
init_otel().await.unwrap();
11671159

11681160
// Test with null pointer
1169-
let result = GlideOpenTelemetry::safe_span_from_pointer(0);
1161+
let result = unsafe { GlideOpenTelemetry::span_from_pointer(0) };
11701162
assert!(result.is_err());
11711163
assert!(
11721164
result
@@ -1176,7 +1168,7 @@ mod tests {
11761168
);
11771169

11781170
// Test with misaligned pointer
1179-
let result = GlideOpenTelemetry::safe_span_from_pointer(0x1001);
1171+
let result = unsafe { GlideOpenTelemetry::span_from_pointer(0x1001) };
11801172
assert!(result.is_err());
11811173
assert!(
11821174
result
@@ -1186,7 +1178,7 @@ mod tests {
11861178
);
11871179

11881180
// Test with address too low
1189-
let result = GlideOpenTelemetry::safe_span_from_pointer(0x800);
1181+
let result = unsafe { GlideOpenTelemetry::span_from_pointer(0x800) };
11901182
assert!(result.is_err());
11911183
assert!(
11921184
result
@@ -1302,13 +1294,13 @@ mod tests {
13021294
}
13031295

13041296
#[test]
1305-
fn test_safe_span_from_pointer_error_messages() {
1297+
fn test_span_from_pointer_error_messages() {
13061298
let rt = shared_runtime();
13071299
rt.block_on(async {
13081300
init_otel().await.unwrap();
13091301

13101302
// Test null pointer error message
1311-
let result = GlideOpenTelemetry::safe_span_from_pointer(0);
1303+
let result = unsafe { GlideOpenTelemetry::span_from_pointer(0) };
13121304
assert!(result.is_err());
13131305
let error_msg = result.unwrap_err().to_string();
13141306
assert!(
@@ -1321,7 +1313,7 @@ mod tests {
13211313
);
13221314

13231315
// Test misaligned pointer error message
1324-
let result = GlideOpenTelemetry::safe_span_from_pointer(0x1001);
1316+
let result = unsafe { GlideOpenTelemetry::span_from_pointer(0x1001) };
13251317
assert!(result.is_err());
13261318
let error_msg = result.unwrap_err().to_string();
13271319
assert!(
@@ -1334,7 +1326,7 @@ mod tests {
13341326
);
13351327

13361328
// Test address too low error message
1337-
let result = GlideOpenTelemetry::safe_span_from_pointer(0x800);
1329+
let result = unsafe { GlideOpenTelemetry::span_from_pointer(0x800) };
13381330
assert!(result.is_err());
13391331
let error_msg = result.unwrap_err().to_string();
13401332
assert!(
@@ -1363,13 +1355,13 @@ mod tests {
13631355
for &invalid_ptr in &invalid_pointers {
13641356
// Validation should return false
13651357
assert!(
1366-
!GlideOpenTelemetry::is_span_pointer_valid(invalid_ptr),
1358+
unsafe { !GlideOpenTelemetry::is_span_pointer_valid(invalid_ptr) },
13671359
"Pointer 0x{:x} should be invalid",
13681360
invalid_ptr
13691361
);
13701362

13711363
// Safe conversion should return error
1372-
let result = GlideOpenTelemetry::safe_span_from_pointer(invalid_ptr);
1364+
let result = unsafe { GlideOpenTelemetry::span_from_pointer(invalid_ptr) };
13731365
assert!(
13741366
result.is_err(),
13751367
"Conversion of invalid pointer 0x{:x} should fail",

0 commit comments

Comments
 (0)