From bc42bf6425cfd4dead60096cd9568b26d083a398 Mon Sep 17 00:00:00 2001 From: Shiv Date: Tue, 31 Mar 2026 22:45:13 +0530 Subject: [PATCH 1/3] fix: correct indentation in blockaddition cleanup --- src/lib_ccx/matroska.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/lib_ccx/matroska.c b/src/lib_ccx/matroska.c index 3b3d8a815..7f5e9a87a 100644 --- a/src/lib_ccx/matroska.c +++ b/src/lib_ccx/matroska.c @@ -1898,12 +1898,24 @@ void free_sub_track(struct matroska_sub_track *track) free(track->lang_ietf); if (track->codec_id_string != NULL) free(track->codec_id_string); - for (int i = 0; i < track->sentence_count; i++) - { - struct matroska_sub_sentence *sentence = track->sentences[i]; - free(sentence->text); - free(sentence); - } +for (int i = 0; i < track->sentence_count; i++) +{ + struct matroska_sub_sentence *sentence = track->sentences[i]; + + free(sentence->text); + + if (sentence->blockaddition != NULL) + { + /* cue_settings_list is the base of the message buffer; + * cue_identifier and comment are pointers into it */ + if (sentence->blockaddition->cue_settings_list != NULL) + { + free(sentence->blockaddition->cue_settings_list); + } + free(sentence->blockaddition); + } + free(sentence); + if (track->sentences != NULL) free(track->sentences); free(track); From dd7d640db03b6b4e504a7c47b3e5a0ae751db697 Mon Sep 17 00:00:00 2001 From: ShivrajsinhJadeja Date: Wed, 22 Apr 2026 14:56:06 +0530 Subject: [PATCH 2/3] fix: restore free_sub_track loop scope and tab indentation --- src/lib_ccx/matroska.c | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/lib_ccx/matroska.c b/src/lib_ccx/matroska.c index 7f5e9a87a..1e7464556 100644 --- a/src/lib_ccx/matroska.c +++ b/src/lib_ccx/matroska.c @@ -1898,26 +1898,29 @@ void free_sub_track(struct matroska_sub_track *track) free(track->lang_ietf); if (track->codec_id_string != NULL) free(track->codec_id_string); -for (int i = 0; i < track->sentence_count; i++) -{ - struct matroska_sub_sentence *sentence = track->sentences[i]; - - free(sentence->text); - - if (sentence->blockaddition != NULL) - { - /* cue_settings_list is the base of the message buffer; - * cue_identifier and comment are pointers into it */ - if (sentence->blockaddition->cue_settings_list != NULL) + + for (int i = 0; i < track->sentence_count; i++) + { + struct matroska_sub_sentence *sentence = track->sentences[i]; + + free(sentence->text); + + if (sentence->blockaddition != NULL) { - free(sentence->blockaddition->cue_settings_list); + /* cue_settings_list is the base of the message buffer; + * cue_identifier and comment are pointers into it */ + if (sentence->blockaddition->cue_settings_list != NULL) + free(sentence->blockaddition->cue_settings_list); + + free(sentence->blockaddition); } - free(sentence->blockaddition); - } - free(sentence); + + free(sentence); + } if (track->sentences != NULL) free(track->sentences); + free(track); } From a73237ab01a99abf1d7077dc62242dfc41f2a0a7 Mon Sep 17 00:00:00 2001 From: Shiv0087 Date: Fri, 24 Apr 2026 16:21:44 +0530 Subject: [PATCH 3/3] fix: store and free blockaddition message buffer --- src/lib_ccx/matroska.c | 7 +++++-- src/lib_ccx/matroska.h | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lib_ccx/matroska.c b/src/lib_ccx/matroska.c index 1e7464556..08c6142b2 100644 --- a/src/lib_ccx/matroska.c +++ b/src/lib_ccx/matroska.c @@ -429,6 +429,7 @@ struct matroska_sub_sentence *parse_segment_cluster_block_group_block_additions( struct block_addition *newBA = calloc(1, sizeof(struct block_addition)); if (newBA == NULL) fatal(EXIT_NOT_ENOUGH_MEMORY, "In parse_segment_cluster_block_group_block_additions: Out of memory."); + newBA->message_buf = message; char *current = message; int lastIndex = 0; int item = 0; @@ -1909,8 +1910,10 @@ void free_sub_track(struct matroska_sub_track *track) { /* cue_settings_list is the base of the message buffer; * cue_identifier and comment are pointers into it */ - if (sentence->blockaddition->cue_settings_list != NULL) - free(sentence->blockaddition->cue_settings_list); + if (sentence->blockaddition->message_buf != NULL) + { + free(sentence->blockaddition->message_buf); + } free(sentence->blockaddition); } diff --git a/src/lib_ccx/matroska.h b/src/lib_ccx/matroska.h index d5ebcd64b..e834359af 100644 --- a/src/lib_ccx/matroska.h +++ b/src/lib_ccx/matroska.h @@ -208,6 +208,7 @@ struct block_addition ULLONG cue_identifier_size; char *comment; ULLONG comment_size; + char *message_buf; }; struct matroska_sub_sentence