From: Francis Deslauriers Date: Wed, 22 Jul 2020 16:24:09 +0000 (-0400) Subject: Fix: ctf: wrongfully requiring CTF metadata signature for every section X-Git-Tag: v2.0.5~19 X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=113aacf74aed646511e262737f4b4c96943890b0 Fix: ctf: wrongfully requiring CTF metadata signature for every section Issue ===== When testing the special live tracing session case of sending the metadata in multiple batches, we witnessed the CTF metadata decoder returning an error if the "/* CTF 1.8" signature is omitted from the metadata sections following the first one. Here is the output of Babeltrace when this error occurs: 07-22 12:18:38.518 539222 539222 W PLUGIN/CTF/META/DECODER ctf_metadata_decoder_append_content@decoder.c:242 [lttng-live] Missing "/* CTF major.minor" signature in plain text metadata file stream: mdec-addr=0x2398ec0 07-22 12:18:38.518 539222 539222 E PLUGIN/CTF/META/DECODER ctf_metadata_decoder_append_content@decoder.c:251 [lttng-live] Invalid metadata version found in plain text signature: version=571641920.0, mdec-addr=0x2398ec0 We expect the decoder to only require this signature when decoding the first section of plain-text metadata. Solution ======== Only check for the signature when processing the first metadata section. Signed-off-by: Francis Deslauriers Signed-off-by: Jérémie Galarneau Change-Id: I3153abf58ade5f5b02362dbedde382f398f5ee4e Reviewed-on: https://review.lttng.org/c/babeltrace/+/7391 --- diff --git a/src/plugins/ctf/common/metadata/decoder.c b/src/plugins/ctf/common/metadata/decoder.c index a62beebf..2a8bcf02 100644 --- a/src/plugins/ctf/common/metadata/decoder.c +++ b/src/plugins/ctf/common/metadata/decoder.c @@ -46,6 +46,7 @@ struct ctf_metadata_decoder { int bo; struct ctf_metadata_decoder_config config; struct meta_log_config log_cfg; + bool has_checked_plaintext_signature; }; struct packet_header { @@ -230,7 +231,7 @@ enum ctf_metadata_decoder_status ctf_metadata_decoder_append_content( status = CTF_METADATA_DECODER_STATUS_ERROR; goto end; } - } else { + } else if (!mdec->has_checked_plaintext_signature) { unsigned int major, minor; ssize_t nr_items; const long init_pos = ftell(fp); @@ -267,6 +268,8 @@ enum ctf_metadata_decoder_status ctf_metadata_decoder_append_content( status = CTF_METADATA_DECODER_STATUS_ERROR; goto end; } + + mdec->has_checked_plaintext_signature = true; } #if YYDEBUG