@@ -236,10 +236,14 @@ static int unpack_link_trace_id(mpack_reader_t *reader, size_t index, void *ctx)
236236 int result ;
237237 cfl_sds_t value ;
238238
239- result = ctr_mpack_consume_binary_tag (reader , & value );
239+ result = ctr_mpack_consume_string_or_nil_tag (reader , & value );
240240
241- if (result == CTR_MPACK_SUCCESS ) {
242- context -> link -> trace_id = ctr_id_create (value , cfl_sds_len (value ));
241+ if (result == CTR_MPACK_SUCCESS && value != NULL ) {
242+ context -> link -> trace_id = ctr_id_from_base16 (value );
243+
244+ if (context -> link -> trace_id == NULL ) {
245+ result = CTR_MPACK_CORRUPT_INPUT_DATA_ERROR ;
246+ }
243247
244248 cfl_sds_destroy (value );
245249 }
@@ -253,11 +257,14 @@ static int unpack_link_span_id(mpack_reader_t *reader, size_t index, void *ctx)
253257 int result ;
254258 cfl_sds_t value ;
255259
256- result = ctr_mpack_consume_binary_or_nil_tag (reader , & value );
260+ result = ctr_mpack_consume_string_or_nil_tag (reader , & value );
257261
258- if (result == CTR_MPACK_SUCCESS &&
259- value != NULL ) {
260- context -> link -> span_id = ctr_id_create (value , cfl_sds_len (value ));
262+ if (result == CTR_MPACK_SUCCESS && value != NULL ) {
263+ context -> link -> span_id = ctr_id_from_base16 (value );
264+
265+ if (context -> link -> span_id == NULL ) {
266+ result = CTR_MPACK_CORRUPT_INPUT_DATA_ERROR ;
267+ }
261268
262269 cfl_sds_destroy (value );
263270 }
@@ -339,13 +346,23 @@ static int unpack_link(mpack_reader_t *reader, size_t index, void *ctx)
339346static int unpack_span_trace_id (mpack_reader_t * reader , size_t index , void * ctx )
340347{
341348 struct ctr_msgpack_decode_context * context = ctx ;
349+ struct ctrace_id * decoded_id ;
342350 int result ;
343351 cfl_sds_t value ;
344352
345- result = ctr_mpack_consume_binary_or_nil_tag (reader , & value );
353+ result = ctr_mpack_consume_string_or_nil_tag (reader , & value );
346354
347355 if (result == CTR_MPACK_SUCCESS && value != NULL ) {
348- ctr_span_set_trace_id (context -> span , value , cfl_sds_len (value ));
356+ decoded_id = ctr_id_from_base16 (value );
357+
358+ if (decoded_id != NULL ) {
359+ ctr_span_set_trace_id_with_cid (context -> span , decoded_id );
360+
361+ ctr_id_destroy (decoded_id );
362+ }
363+ else {
364+ result = CTR_MPACK_CORRUPT_INPUT_DATA_ERROR ;
365+ }
349366
350367 cfl_sds_destroy (value );
351368 }
@@ -356,13 +373,23 @@ static int unpack_span_trace_id(mpack_reader_t *reader, size_t index, void *ctx)
356373static int unpack_span_span_id (mpack_reader_t * reader , size_t index , void * ctx )
357374{
358375 struct ctr_msgpack_decode_context * context = ctx ;
376+ struct ctrace_id * decoded_id ;
359377 int result ;
360378 cfl_sds_t value ;
361379
362- result = ctr_mpack_consume_binary_or_nil_tag (reader , & value );
380+ result = ctr_mpack_consume_string_or_nil_tag (reader , & value );
363381
364382 if (result == CTR_MPACK_SUCCESS && value != NULL ) {
365- ctr_span_set_span_id (context -> span , value , cfl_sds_len (value ));
383+ decoded_id = ctr_id_from_base16 (value );
384+
385+ if (decoded_id != NULL ) {
386+ ctr_span_set_span_id_with_cid (context -> span , decoded_id );
387+
388+ ctr_id_destroy (decoded_id );
389+ }
390+ else {
391+ result = CTR_MPACK_CORRUPT_INPUT_DATA_ERROR ;
392+ }
366393
367394 cfl_sds_destroy (value );
368395 }
@@ -373,13 +400,23 @@ static int unpack_span_span_id(mpack_reader_t *reader, size_t index, void *ctx)
373400static int unpack_span_parent_span_id (mpack_reader_t * reader , size_t index , void * ctx )
374401{
375402 struct ctr_msgpack_decode_context * context = ctx ;
403+ struct ctrace_id * decoded_id ;
376404 int result ;
377405 cfl_sds_t value ;
378406
379- result = ctr_mpack_consume_binary_or_nil_tag (reader , & value );
407+ result = ctr_mpack_consume_string_or_nil_tag (reader , & value );
380408
381409 if (result == CTR_MPACK_SUCCESS && value != NULL ) {
382- ctr_span_set_parent_span_id (context -> span , value , cfl_sds_len (value ));
410+ decoded_id = ctr_id_from_base16 (value );
411+
412+ if (decoded_id != NULL ) {
413+ ctr_span_set_parent_span_id_with_cid (context -> span , decoded_id );
414+
415+ ctr_id_destroy (decoded_id );
416+ }
417+ else {
418+ result = CTR_MPACK_CORRUPT_INPUT_DATA_ERROR ;
419+ }
383420
384421 cfl_sds_destroy (value );
385422 }
0 commit comments