@@ -1197,4 +1197,55 @@ mod tests {
11971197 1.0
11981198 ) ;
11991199 }
1200+
1201+ #[ test]
1202+ fn test_rmp_serde_deserialize_meta_with_null_values ( ) {
1203+ // Create a JSON representation with null value in meta
1204+ let span_json = json ! ( {
1205+ "service" : "test-service" ,
1206+ "name" : "test_name" ,
1207+ "resource" : "test-resource" ,
1208+ "trace_id" : 1_u64 ,
1209+ "span_id" : 2_u64 ,
1210+ "parent_id" : 0_u64 ,
1211+ "start" : 0_i64 ,
1212+ "duration" : 5_i64 ,
1213+ "error" : 0_i32 ,
1214+ "meta" : {
1215+ "service" : "test-service" ,
1216+ "env" : "test-env" ,
1217+ "runtime-id" : "test-runtime-id-value" ,
1218+ "problematic_key" : null // Ensure this null value does not cause an error
1219+ } ,
1220+ "metrics" : { } ,
1221+ "type" : "" ,
1222+ "meta_struct" : { } ,
1223+ "span_links" : [ ] ,
1224+ "span_events" : [ ]
1225+ } ) ;
1226+
1227+ let traces_json = vec ! [ vec![ span_json] ] ;
1228+ let encoded_data = rmp_serde:: to_vec ( & traces_json) . unwrap ( ) ;
1229+ let traces: Vec < Vec < pb:: Span > > = rmp_serde:: from_read ( & encoded_data[ ..] )
1230+ . expect ( "Failed to deserialize traces with null values in meta" ) ;
1231+
1232+ assert_eq ! ( 1 , traces. len( ) ) ;
1233+ assert_eq ! ( 1 , traces[ 0 ] . len( ) ) ;
1234+ let decoded_span = & traces[ 0 ] [ 0 ] ;
1235+
1236+ assert_eq ! ( "test-service" , decoded_span. service) ;
1237+ assert_eq ! ( "test_name" , decoded_span. name) ;
1238+ assert_eq ! ( "test-resource" , decoded_span. resource) ;
1239+ assert_eq ! ( "test-service" , decoded_span. meta. get( "service" ) . unwrap( ) ) ;
1240+ assert_eq ! ( "test-env" , decoded_span. meta. get( "env" ) . unwrap( ) ) ;
1241+ assert_eq ! (
1242+ "test-runtime-id-value" ,
1243+ decoded_span. meta. get( "runtime-id" ) . unwrap( )
1244+ ) ;
1245+ // Assert that the null value was filtered out (key not present in map)
1246+ assert ! (
1247+ !decoded_span. meta. contains_key( "problematic_key" ) ,
1248+ "Null value should be skipped, but key was present"
1249+ ) ;
1250+ }
12001251}
0 commit comments