From 6dffaf7d3b2163ef0af592ae2ad54e5ad12f9a6c Mon Sep 17 00:00:00 2001 From: Sadia Peerzada Date: Sat, 7 Mar 2026 13:54:15 +0530 Subject: [PATCH 1/3] Add NULL check after strdup in parse_segment_track_entry strdup("eng") may return NULL if memory allocation fails. Added checks and call to fatal(EXIT_NOT_ENOUGH_MEMORY) to prevent potential NULL dereference. Added memory allocation check for language string. --- src/lib_ccx/matroska.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/lib_ccx/matroska.c b/src/lib_ccx/matroska.c index 5517e7c32..98ad7bd6a 100644 --- a/src/lib_ccx/matroska.c +++ b/src/lib_ccx/matroska.c @@ -880,6 +880,8 @@ void parse_segment_track_entry(struct matroska_ctx *mkv_ctx) ULLONG track_number = 0; enum matroska_track_entry_type track_type = MATROSKA_TRACK_TYPE_VIDEO; char *lang = strdup("eng"); + if (!lang) + fatal(EXIT_NOT_ENOUGH_MEMORY, "In parse_segment_track_entry: Out of memory allocating lang."); char *header = NULL; char *lang_ietf = NULL; char *codec_id_string = NULL; @@ -1043,10 +1045,11 @@ void parse_segment_track_entry(struct matroska_ctx *mkv_ctx) } // Default to "eng" if we somehow don't have a language yet if (lang == NULL) - { - lang = strdup("eng"); - } - } + { + lang = strdup("eng"); + if (!lang) + fatal(EXIT_NOT_ENOUGH_MEMORY, "In parse_segment_track_entry: Out of memory allocating lang."); + } else { free(lang_ietf); // Free if not a subtitle track From bd18f5697ad668e1e246383536c4a5dda3290779 Mon Sep 17 00:00:00 2001 From: Sadia Peerzada Date: Sat, 7 Mar 2026 14:05:31 +0530 Subject: [PATCH 2/3] Refactor language handling in matroska.c --- src/lib_ccx/matroska.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/lib_ccx/matroska.c b/src/lib_ccx/matroska.c index 98ad7bd6a..ea968a498 100644 --- a/src/lib_ccx/matroska.c +++ b/src/lib_ccx/matroska.c @@ -1033,7 +1033,7 @@ void parse_segment_track_entry(struct matroska_ctx *mkv_ctx) case MATROSKA_SEGMENT_TRACK_LANGUAGE_IETF: lang_ietf = read_vint_block_string(file); mprint(" Language IETF: %s\n", lang_ietf); - // We'll store this for later use rather than freeing it immediately + // We'll store this for later use rather than freeing it immediately if (track_type == MATROSKA_TRACK_TYPE_SUBTITLE) { // Don't free lang_ietf here, store in track @@ -1043,20 +1043,22 @@ void parse_segment_track_entry(struct matroska_ctx *mkv_ctx) free(lang); lang = NULL; } + // Default to "eng" if we somehow don't have a language yet if (lang == NULL) - { - lang = strdup("eng"); - if (!lang) - fatal(EXIT_NOT_ENOUGH_MEMORY, "In parse_segment_track_entry: Out of memory allocating lang."); - } + { + lang = strdup("eng"); + if (!lang) + fatal(EXIT_NOT_ENOUGH_MEMORY, + "In parse_segment_track_entry: Out of memory allocating lang."); + } + } else { free(lang_ietf); // Free if not a subtitle track lang_ietf = NULL; } MATROSKA_SWITCH_BREAK(code, code_len); - /* Misc ids */ case MATROSKA_VOID: read_vint_block_skip(file); From aa1dcba6efdf11f1ae7ccd7e556c2e52686a9a96 Mon Sep 17 00:00:00 2001 From: Sadia Peerzada Date: Sat, 7 Mar 2026 20:39:51 +0530 Subject: [PATCH 3/3] Add basic report.txt visualization tool This HTML file provides a user interface for visualizing CCExtractor reports, allowing users to upload a report.txt file and display relevant results. --- tools/report-visualizer/index.html | 79 ++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 tools/report-visualizer/index.html diff --git a/tools/report-visualizer/index.html b/tools/report-visualizer/index.html new file mode 100644 index 000000000..d4a81edeb --- /dev/null +++ b/tools/report-visualizer/index.html @@ -0,0 +1,79 @@ + + + + CCExtractor Report Visualizer + + + + + + +

CCExtractor Report Visualizer

+ +

Upload a report.txt file generated with -out=report

+ + + +
+ + + + +