From 2a5a092469bfa712bb0e8163d13554172f3da2b8 Mon Sep 17 00:00:00 2001 From: Stefan Weil Date: Wed, 20 Jun 2018 19:56:15 +0200 Subject: [PATCH] Fix CID 1393241 (Dereference null return value) Add also some error handling if fopen fails. Signed-off-by: Stefan Weil --- src/classify/mastertrainer.cpp | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/classify/mastertrainer.cpp b/src/classify/mastertrainer.cpp index b90db311e..682d25bb6 100644 --- a/src/classify/mastertrainer.cpp +++ b/src/classify/mastertrainer.cpp @@ -578,8 +578,12 @@ void MasterTrainer::WriteInttempAndPFFMTable(const UNICHARSET& unicharset, INT_TEMPLATES int_templates = classify->CreateIntTemplates(float_classes, shape_set); FILE* fp = fopen(inttemp_file, "wb"); - classify->WriteIntTemplates(fp, int_templates, shape_set); - fclose(fp); + if (fp == nullptr) { + tprintf("Error, failed to open file \"%s\"\n", inttemp_file); + } else { + classify->WriteIntTemplates(fp, int_templates, shape_set); + fclose(fp); + } // Now write pffmtable. This is complicated by the fact that the adaptive // classifier still wants one indexed by unichar-id, but the static // classifier needs one indexed by its shape class id. @@ -612,15 +616,19 @@ void MasterTrainer::WriteInttempAndPFFMTable(const UNICHARSET& unicharset, shapetable_cutoffs.push_back(max_length); } fp = fopen(pffmtable_file, "wb"); - shapetable_cutoffs.Serialize(fp); - for (int c = 0; c < unicharset.size(); ++c) { - const char *unichar = unicharset.id_to_unichar(c); - if (strcmp(unichar, " ") == 0) { - unichar = "NULL"; + if (fp == nullptr) { + tprintf("Error, failed to open file \"%s\"\n", pffmtable_file); + } else { + shapetable_cutoffs.Serialize(fp); + for (int c = 0; c < unicharset.size(); ++c) { + const char *unichar = unicharset.id_to_unichar(c); + if (strcmp(unichar, " ") == 0) { + unichar = "NULL"; + } + fprintf(fp, "%s %d\n", unichar, unichar_cutoffs[c]); } - fprintf(fp, "%s %d\n", unichar, unichar_cutoffs[c]); + fclose(fp); } - fclose(fp); free_int_templates(int_templates); delete classify; }